はじめにPID 1 問題というのは、コンテナを実行した際にアプリケーションのプロセスが PID 1(プロセス番号が1番)で実行されることで、コンテナに対して SIGTERM などのシグナルを送信してもコンテナ内のプロセスが正常に終了しないというものです。ここでは2020年3月現在でこの PID 1 問題を回避する方法を Docker と Kubernetes のそれぞれで紹介します。 TL;DRアプリケーションが「明示的にシグナルをハンドリングするようにする」、または「PID 1 で実行されないようにする」の2つの回避策があるアプリケーションプロセスが PID 1 で実行されないようにする場合、Docker では Tini のような軽量 init を使う、もしくは Docker 1.13 以上の場合は docker run の --init オプションを使うで問題を回避できるKuberne
表題のような問題があり,その調査したという記録です.なお,結論を一言で言うと--initを使え,ということになります. そもそもDockerコンテナを起動すると,CMDあるいはENTRYPOINTに指定されたコマンドがコンテナ内でPID 1として起動します.これが何を意味するかと言うと,「CMDあるいはENTRYPOINTに指定されたコマンド」はそのコマンド自体の責務をまっとうするのと同時に,initプロセスとしての振る舞いも行わなければならないということになります (id:hayajo_77さんにこの辺を詳しく教えてもらいました,ありがとうございます). つまりPID 1で動いているプロセスは「SIGCHLDをトラップすることで孤児プロセスを適切に回収し,waitpidをかける」という処理も適切に行う必要があります. さて,puppeteerを使ってChromeブラウザを起動するとどうな
プロセスとかハードウェアの情報をSQL likeに取得できるすごいツール。 詳しく読んでないですが、CLIだけでなくdaemonとして動かして結果も記録できるとのこと。 osquery | Easily ask questions about your Linux, Windows, and macOS infrastructure 物によってはコマンド打つより、見やすくていいかもしれない。 こんな感じ SELECT DISTINCT process.name, listening.port, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid WHERE listening.address = '0.0.0.0'; 他には 以下にテーブ
しばらくLinuxネタが続く・・。 近いうちに最近出たJava8ネタを書いてみようと思います。が、もう少しLinuxネタにお付き合いください。 前回はsshdを対象に親プロセスをkillした場合の動作を確認した。 killされたプロセスの子プロセスは孤児プロセスとなり、カーネルによって自動的にinitプロセスの子として扱われる事を説明した。(この動作を「リペアレンティング」と呼ぶ) 今回はこの続き。 Linuxで作業していてCtrl+Cしてプロセスを終了した場合、フォアグラウンドのプロセスやその子プロセスも一緒に終了する。 ということは、子プロセスは孤児として扱われず、リペアレンティングされていないことになる。 今回の記事ではこの振る舞いの違い(リペアレンティングされるか否か)に着目し、kill -SIGINTコマンドとCtrl+Cの違いについて考えていく。 そもそもkillコマンドやCt
FreeBSD・OpenBSDと他で ps -e の動作が違ってハマってしまいましたが、Proclet という簡単なsupervisor・プロセス管理モジュールをCPANにあげました。 Proclet - minimalistic Supervisor https://metacpan.org/module/Proclet GrowthForecastでは、growthforecast.pl というスクリプトを実行するだけでWebサーバと2つのWorkerが起動します。CloudForecastのように個別に実行が必要になると使うのも面倒ですよね。 growthforecast.pl を実行後、pstreeで見るとこうなってます。growthforecast.plがsupervisor的に動作し、終了したプロセスがあれば自動で起動し直します。 -+= 70330 kazeburo perl
以前http://tech.naver.jp/blog/?p=1369の記事を読んだのだけれど、それまでにprocessの知識が無かったりして、まったく理解できませんでした。そこでWorking with UNIX ProcessesやServer::Starterの中身を呼んでようやくhot deployの仕組みを理解できた(気になっている)ので、Server::Starterの実装を追いながら、それをまとめてみます。 hot deployとは hot deployとは「再起動の時にリクエストの処理を続けながら、変更の内容を反映するための手段」です。 通常serverをrestartさせるときは、stop -> startの流れになると思いますが、この場合stopしてから、start出来るまでの期間にリクエストを処理できない期間が発生します。その期間なしにdeployする仕組みがhot
htopはtopコマンドの機能強化版です。 普段使っているtopでは見れない情報も見れたりするのでお奨めです。 テキストモードのアプリケーションで情報を色分けして表示したり、プロセスの優先度を変更したり出来ます。 インストールしてみよう ▼CentOS 5の場合 yumを使ってインストールします # yum --enablerepo=epel install htop ※epelレポジトリがインストールされていない場合は、インストールをする必要があります。 32bit OSの場合 # sudo rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm 64bit OSの場合 # sudo rpm -Uhv http://download.fedora.redhat.com/p
すべてのプロセスの開始時間と終了時間を記録します。作業時間の把握とかに使えるかもしれませんね。勢いだけで書いたので人柱ですが、それでもよければどうぞー(process_history.cab)。 アーカイブはドライバと実行可能ファイルで構成されています。ドライバをロードする機能は提供されていないので ldsys あたりを利用してください。 ドライバがロードされている期間に生成されたプロセスのみが対象です。したがってWindows起動後に読み込ませた場合、それ以前のプロセス情報は管理されません。Windowsを再起動すると、すべてのプロセス情報が管理されるようになります。 実行可能ファイルをビルドするには boost が必要です。ドライバを VisualStudio からビルドするには DDKBUILD.CMD が必要です。 出力 >process_history.exe No ImageN
こんにちは satoです。 monitは プロセスの監視を行うデーモンです。 条件とそれに伴うアクションを指定することができます。 条件とは例えば以下のようなものがあります プロセスが起動していなかったら 特定のプロセスのメモリの使用量が あるサイズを超えたら 特定のプロセスのCPUの使用率が 50%を超えている状態が 10分続いたら 特定のポートに接続できなくなったら など アクションには以下のような物があります 起動、再起動する アラートメールを送信する ユーザスクリプトを実行する など これらを組み合わせて、プロセスの監視を行います。とくにユーザが作成したプログラムの監視などに効果を発揮します。インストールは RedHat系なら yum install monit で入ります。(CentOSや商用のRedHatはrpmforgeをリポジトリとして追加する必要があります) 主な設定ファ
Linux は fork で子プロセスを作成した場合、親の仮想メモリ空間の内容を子へコピーする必要があります。しかしまともに全空間をコピーしていたのでは fork のコストが高くなってしまいますし、子が親と同じようなプロセスとして動作し続ける場合は、内容の重複したページが多数できてしまい、効率がよくありません。 そこで、Linux の仮想メモリは、メモリ空間を舐めてコピーするのではなく、はじめは親子でメモリ領域を共有しておいて、書き込みがあった時点で、その書き込みのあったページだけを親子で個別に持つという仕組みでこの問題を回避します。Copy-On-Write (CoW) と呼ばれる戦略です。共有メモリページは、親子それぞれの仮想メモリ空間を同一の物理メモリにマッピングすることで実現されます。より詳しくは コピーオンライト - Wikipedia などを参照してください。 この CoW に
また Linux カーネルの話です。 Linux では fork によるマルチプロセスと、pthread によるマルチスレッドでの並行処理を比較した場合、後者の方がコストが低く高速と言われます。「スレッドはメモリ空間を共有するので、マルチプロセスとは異なりコンテキストスイッチ時にメモリ空間の切り替えを省略できる。切り替えに伴うオーバーヘッドが少ない。」というのが FAQ の答えかと思います。 が「オーバーヘッドが少ない」と一言にいわれても具体的にどういうことなのかがイメージできません。そこで Linux のスレッド周りの実装を見て見ようじゃないか、というのが今回のテーマです。 3分でわかる(?) マルチプロセスとマルチスレッド まずはうんちく。マルチプロセスとマルチスレッドの違いの図。以前に社内で勉強会をしたときに作った資料にちょうど良いのがあったので掲載します。Pthreadsプログラミ
XP(Extreme Programming)に代表されるアジャイル開発手法では、さまざまなプラクティスが提案されており、それらに興味を持っている方は大勢いると思います。実際の開発プロジェクトでは、参画するメンバのスキルによって、数多くのプラクティスから適切なものを選択する必要があります。 また、オフショア開発などプロジェクト特有の制約事項によって、一般的なやり方とは異なる手順で開発を進める場合もあります。利用するプラクティスや開発の段取りを定義するのが、開発プロセスです。 今回は、開発プロセスをEclipseベースで定義するためのプラグインEPF(Eclipse Process Framework)を2回に分けて紹介します。EPFを用いて開発プロセスを明文化して定義することにより、ほかのプロジェクトでその開発プロセスを再利用したり、開発プロセスのカスタマイズを簡単に行えるようになります。
昨日に続きますが、ディベロッパーサミットでgoogleの開発プロセスについて聴講してきました。Googleは一味異なるプロセスや組織をお持ちのようです。請負開発をされている方には新鮮なのではないでしょうか。工藤氏はGoogleのインフラ寄りの話、小松氏は開発プロセスの話で講演されていました。サービスインフラも開発プロセスも私にとっては身近な話ですが、ここでは、小松氏の講演について書こうと思います。講演では、極めて異例/エキセントリックというプロセスは話されていませんでしたが、以下は、特徴的と感じました。 異なる観点から複数のレビューを実施していること。いわゆるperspective-based readingを実施しているそうです。役割分担型レビュー(reviewというよりはおそらくinspection)で、セキュリティやユーザインタフェースの観点から見たデザイン/ソースコードの妥当性検証
実行中プロセスの詳細情報を表示できるソフト「ProcessWalker Express」v5.1.960.4が、11月11日に公開された。Windows 2000/XP/Server 2003/XP x64/Server 2003 x64に対応するフリーソフトで、現在作者のホームページからダウンロードできる。 「ProcessWalker Express」は、実行中のプロセスに関する詳細情報を表示できるソフト。プロセス名、ユーザー名、メモリ使用率といった情報に加え、プロセスごとのスレッド数やハンドル数、開始時間、ファイルパスなど、Windows標準のタスクマネージャでは確認できない項目も一覧表示できるのが特長。 各プロセスのプロパティ画面では、ワーキングセットやページファイルといったパフォーマンス情報や、該当プロセスが呼び出しているDLLなどのモジュール一覧も確認できる。 また、実行中のサ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く