我知道如何获取系统中的总内存:
$ 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}' | 尾部 -1)))
答案4
你应该能够用头部、尾部和切口来做到这一点:
free -lm | head -2 | tail -1 | tr -s ' ' | cut -f2 -d' '
head -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' '
- 得到第二个字段,以空格分隔。
3757