
私はシステムの合計メモリを取得する方法を知っています。
$ free -lm
total used free shared
Mem: 3008 2495 513 57
Nginxでワーカープロセスの基本メモリ消費(RSS)を取得する方法を知っています。
$ ps -C nginx -O rss
PID RSS S TTY TIME COMMAND
1564 1336 S ? 00:00:00 nginx: master process /usr/sbin/nginx
1565 1756 S ? 00:00:00 nginx: worker process
1566 1756 S ? 00:00:00 nginx: worker process
1567 1756 S ? 00:00:00 nginx: worker process
1568 1756 S ? 00:00:00 nginx: worker process
これで、交換に頼らずにシステムで使用できるワーカープロセスの数を確認するには、次の手順を実行します。
echo $((3008 * 1024))
3080192
$ echo $((3080192 / 1756))
1754
私のサーバーは、スワップを使用せずに1754個のnginxワーカースレッドを処理できます。ただし、上記のマルチステッププロセスをコマンドラインで実行できる単一の行に置き換えることができれば幸いです。
私の問題は、コマンドラインのfreeコマンドから「3008」を抽出する方法がわからないことです。この問題をどのように解決できますか?
答え1
私の問題は、コマンドラインのfreeコマンドから「3008」を抽出する方法がわからないことです。
次の出力が与えられた場合:
free -lm
total used free shared buffers cached
Mem: 3757 1765 1991 138 122 766
Low: 3757 1765 1991
High: 0 0 0
-/+ buffers/cache: 876 2880
Swap: 7772 0 7772
この試み:
free -lm | grep '^Mem' | awk '{ print $2 }'
3757
total
これにより、行の列が返されますMem:
。私は3757
。
答え2
awkの無料配送は必要な値を抽出します。
free -l | awk '/^Mem/{print $2}'
答え3
それは次のとおりです。
echo $(($(($(free -lm | grep Mem | awk '{print $2}') * 1024)) / $(ps -C nginx -O rss |grep 'nginx: ワーカープロセス $' | awk ' {印刷$ 2} '|
答え4
頭、尾、カットを使ってこれを行うことができるはずです。
free -lm | head -2 | tail -1 | tr -s ' ' | cut -f2 -d' '
head -2
上位2本のラインだからです。
total used free shared buffers cached
Mem: 3757 1765 1991 138 122 766
tail -1
なぜならこれが最後の行です。
Mem: 3757 1765 1991 138 122 766
tr -s ' '
- スペースチェーンを単一のスペースに変換します。
Mem: 3757 1765 1991 138 122 766
最後に - cut -f2 -d' '
- スペースで区切られた2番目のフィールドを取得します。
3757