ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

Linuxでスレッドごとに固有のIDを発行できないか

なるべく簡単なロジックで、おおむね被らないようなIDをスレッドごとに吐けないだろうか、それも同じスレッドなら何度呼び出しても同じIDになるやつ(=キャッシュが要らない)、と思ってこういうのを考えた。

とりあえずコード:

続きを読む

何もツールがなくてもコンテナの中のTCP通信の状態を見たい

完全に消費税に負けた...

今日も小ネタです。

一般に、以下のようなことを調べる時 netstatss などのツールは便利です。

  • あるポートがリッスンされているか知りたい
  • あるコネクションに実際に通信があるか知りたい
  • MySQLサーバなど外部プロセス/サーバにコネクションが貼られているか知りたい

でもコンテナ環境では、そんな余計なツールは入っていない!!!ことも多い。

そんな時でも、 /proc ファイルシステムはほぼ間違いなくマウントされているはずです。 なのでそこを直接見ることも検討しましょう。

続きを読む

社内生活発表会でeBPF(bpftrace)の話をした

カーネル謎機能を活用したパフォーマンスとの戦い」と題してPepabo Tech Fridayで発表していた。ペパボテックフライデーとは下記です。

tech.pepabo.com

しかし、割と生々しい社内のプロジェクトの計測値を出しているので、資料は公開しません...(入社したらあるいは... ;) ) が、一般的な内容にしてどこかで話そうという気持ちはある(言ってしまった...)。

続きを読む

Nginxをbpftraceで追いかける

このブログは、昨日の分です。だめですかね...

カーネルトレーシングシリーズです。今日は、Nginxを、追ってみます。

まず、 uprobe が見えるnginxバイナリを用意する

大抵の場合、パッケージのnginxバイナリはシンボルがstripされていて、uprobeが見えない。 nginx-build などで自分でビルドする。

github.com

トレーシングの都合上、 --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

リクエストごとに呼ばれるprobeを確認する

続きを読む