swapが使用しているプロセスのTOP10を表示する
swapを使用しているプロセスを確認する
最近、サーバーのメモリが逼迫してswapを使っている場合があり、どのプロセスが使用しているか確認したいのでその方法を調べました
/proc 以下のプロセス情報で確認する
使用しているプロセスの各種情報は、/proc/[プロセスID]/status のファイルに保存されています。下記ではmysqlの情報です。この中でswapを使用している情報を知りたい場合は、「VmSwap」の箇所をgrep すると使用しているswapのメモリ量が表示されます
$ cat /proc/23320/status Name: mysqld Umask: 0006 State: S (sleeping) Tgid: 23320 Ngid: 0 Pid: 23320 PPid: 1150 TracerPid: 0 Uid: 27 27 27 27 Gid: 27 27 27 27 FDSize: 1024 Groups: 27 VmPeak: 4109128 kB VmSize: 3881728 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 2828968 kB VmRSS: 2751828 kB # swapの使用量を調べる $ grep VmSwap /proc/23320/status VmSwap: 113608 kB
この /proc/*/status を「VmSwap」でgrepして、下記のようにソートすればswapが使用しているプロセスのTOP10が表示されます。但しプロセスIDでの表示となります
$ grep VmSwap /proc/*/status | sort -nr -k 2 | head -10 /proc/23320/status:VmSwap: 113336 kB /proc/30588/status:VmSwap: 59808 kB /proc/1016/status:VmSwap: 12552 kB /proc/723/status:VmSwap: 8216 kB /proc/30893/status:VmSwap: 6364 kB /proc/30587/status:VmSwap: 5916 kB /proc/30838/status:VmSwap: 4188 kB /proc/30825/status:VmSwap: 4164 kB /proc/717/status:VmSwap: 3288 kB /proc/1019/status:VmSwap: 2712 kB
プロセスIDだと、どのプロセスかわからないので、プロセス名にするには以下のコマンドとなります
grep VmSwap /proc/*/status | sort -k 2 -nr | cut -d"/" -f3 | grep -e '^[0-9]*$' | xargs -I{} ps u -p{} --no-headers mysql 23320 7.6 45.0 3881728 2750800 ? Sl Jun28 1305:56 /usr/libexec/mysqld root 1016 0.0 0.0 583952 776 ? Ssl Mar14 42:18 /usr/bin/python2 -Es /usr/sbin/tuned -l -P polkitd 723 0.0 0.0 614436 1340 ? Ssl Mar14 17:34 /usr/lib/polkit-1/polkitd --no-debug
「smem」コマンドを利用して、swapを使用しているプロセスを確認する
「smem」という、メモリ使用状況を監視および分析するためのツールがあります。このsmem を利用してswapを使用しているプロセスを確認します
標準では、smemは、インストールされていないと思いますので、yum, dnfコマンドでsmemをインストールします
# yumコマンドの場合 $ sudo yum install smem # dnfコマンドの場合 $ sudo dnf install smem
「sudo smem -rs swap」で、使用しているプロセスが表示されます。
オプションの詳細は下記となります
-r
:ソートのキーとして使用するメモリリソースを指定します。例えば、-rs swap
とすると、Swap使用量でソートされます。-s
:指定したメモリリソースの使用量を表示します。例えば、-rs swap
とすると、Swap使用量が表示されます。
$ sudo smem -rs swap PID User Command Swap USS PSS RSS 1073 mysql /usr/libexec/mariadbd --bas 59000 102892 103204 108168 1044 apache php-fpm: pool www 23444 18740 25470 101100 13697 apache php-fpm: pool www 23396 19084 26278 104896 1032 apache php-fpm: pool www 23384 16736 23583 100920 1050 apache php-fpm: pool www 23380 21396 27737 101688 1487 apache php-fpm: pool www 23376 18840 25763 103624 1057 apache php-fpm: pool www 23364 20292 27765 106860 6802 apache php-fpm: pool www 23360 16988 23718 100332 113955 apache php-fpm: pool www 23336 16692 27072 105348
swapを使用しているプロセスのTOP10を表示するには、headコマンドを下記のように利用します
$ sudo smem -rs swap | head -n 11 PID User Command Swap USS PSS RSS 1073 mysql /usr/libexec/mariadbd --bas 58952 103212 103525 108488 1044 apache php-fpm: pool www 23428 18740 25470 101100 13697 apache php-fpm: pool www 23380 19084 26282 104904 1032 apache php-fpm: pool www 23368 18760 25607 102948 1050 apache php-fpm: pool www 23364 21396 27736 101688 1487 apache php-fpm: pool www 23360 19220 26143 104004 1057 apache php-fpm: pool www 23348 20292 27765 106864 6802 apache php-fpm: pool www 23344 16692 23423 100040 113955 apache php-fpm: pool www 23320 19116 29489 107764 26745 apache php-fpm: pool www 22548 18680 25848 101176
ディスカッション
コメント一覧
まだ、コメントがありません