地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Ruby】メモリの共有率を計算するスクリプトを書いた

github.com

マルチプロセスモデルなどで動くアプリケーションがどれくらい他プロセスとメモリを共有しているのかを計算スクリプトを書いてみました。

Linuxに関してのCoWの細かい話は他記事で書いてるので省略。引数のpidからtgidを中で取得したりして子プロセスをのPIDを指定したら関連のプロセスの分のメモリ共有率を計算したり/proc/${PID}/cmdlineにあるコマンドでgrepして計算したりする処理も入れたりもしてみました。以下は出力。定期的にkillすること想定してプロセスの起動時間もついでに出してます。

[root@slave ~]# ruby shmget.rb nginx
28880: 84.59[%] (900/1064) 2021-08-28 11:58:00 -0400 nginx: master process /usr/sbin/nginx
28881: 73.32[%] (1616/2204) 2021-08-28 11:58:00 -0400 nginx: worker process
28882: 73.32[%] (1616/2204) 2021-08-28 11:58:00 -0400 nginx: worker process
28883: 73.32[%] (1616/2204) 2021-08-28 11:58:00 -0400 nginx: worker process
28884: 73.32[%] (1616/2204) 2021-08-28 11:58:00 -0400 nginx: worker process

PID, 共有率, (shared-memory/rss), プロセス起動時間, cmdlineの内容みたいな順番で表示してます。Unicornとかhttpdのpreforkで動いているアプリケーションの測定などなど用途はいろいろありそうです。procfsから取れる情報をパースしてるだけになってるので他にも何かしらアイディア浮かべば追加していきたい。