消費税... うっ...
なんというか、普通に忙しくブログを書けていなかった。あとリングフィット買いました。
11月、1回のワークショップと2回の登壇を予定しています。
続きを読むこのブログは、昨日の分です。だめですかね...
カーネルトレーシングシリーズです。今日は、Nginxを、追ってみます。
大抵の場合、パッケージのnginxバイナリはシンボルがstripされていて、uprobeが見えない。 nginx-build などで自分でビルドする。
トレーシングの都合上、 --with-debug
でビルドするといいらしい( ngx_request_t *
などがトレーサから見えるようになる)。
$ nginx-build -d src/nginx-build -v 1.15.12 \ --with-debug
uprobeは以下の通り確認できる。
$ sudo bpftrace -l 'uprobe:/usr/local/nginx/sbin/nginx' | head uprobe:/usr/local/nginx/sbin/nginx:deregister_tm_clones uprobe:/usr/local/nginx/sbin/nginx:register_tm_clones uprobe:/usr/local/nginx/sbin/nginx:__do_global_dtors_aux uprobe:/usr/local/nginx/sbin/nginx:frame_dummy uprobe:/usr/local/nginx/sbin/nginx:ngx_load_module uprobe:/usr/local/nginx/sbin/nginx:ngx_unload_module uprobe:/usr/local/nginx/sbin/nginx:ngx_set_env uprobe:/usr/local/nginx/sbin/nginx:ngx_set_cpu_affinity uprobe:/usr/local/nginx/sbin/nginx:ngx_set_priority uprobe:/usr/local/nginx/sbin/nginx:ngx_set_worker_processes
まだまだ消費増税に対抗するため、無理やりネタを紡ぎ出す。
named pipe、「名前付きパイプ」の簡単な使い方を残しておく。
プロセスの間でなにかしらのデータのやり取りをすることをプロセス間通信(Inter Process Communication)と呼ぶ。たとえばLinuxでは以下のような方法がある。
この分類は「Linuxプログラミングインターフェース」を参考にした。
IPCで最も手軽なのはパイプの作成で、fork元でpipe()などを用いて読み出し専用/書き込み専用の1組のパイプを作り、fork先でもそのfile descriptorを継承して使う。お互いにread/writeという基本的なシステムコールのみでデータをやり取りできるメリットがある。
mruby(CRubyも同様)の例を昔書いた。
一方でパイプは、fdを共有できるような、例えば親子関係があるプロセス同士でないと利用できない。そこでファイルシステム上に作成できる名前付きパイプを使う。