使用以下命令计算运行中的 php-fpm
进程的平均内存使用量:
ps -ylC php-fpm --sort:rss | awk '{sum+=$8; cnt++} END {print "Avg="sum/(1024*cnt)"MB"}'
下面逐步解释每个部分的功能和逻辑:
1. ps -ylC php-fpm --sort:rss
ps
是一个用于显示当前系统中运行进程状态的工具。-y
:以 RSS(Resident Set Size,常驻内存大小)为单位显示内存使用情况。-l
:以长格式输出,包含更多的详细信息。-C php-fpm
:指定只显示名为php-fpm
的进程。--sort:rss
:按照 RSS(常驻内存大小)对输出结果进行排序。
输出示例 :
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1234 1 20 0 50000 10000 - Ss ? 0:00 php-fpm
4 0 1235 1234 20 0 50000 15000 - S ? 0:00 php-fpm
- 其中,第 8 列(RSS 列)表示每个进程的常驻内存大小(以 KB 为单位)。
2. awk '{sum+=$8; cnt++} END {print "Avg="sum/(1024*cnt)"MB"}'
awk
是一个强大的文本处理工具,用于对输入数据进行逐行处理。{sum+=$8; cnt++}
:$8
表示输入行的第 8 列(即 RSS 内存大小,单位为 KB)。sum+=$8
将每一行的 RSS 值累加到变量sum
中。cnt++
计数器,记录处理的行数(即php-fpm
进程的数量)。
END {print "Avg="sum/(1024*cnt)"MB"}
:- 在所有行处理完成后,执行
END
块中的代码。 sum/(1024*cnt)
计算平均内存使用量:sum
是所有进程的 RSS 总和(单位为 KB)。1024
将 KB 转换为 MB。cnt
是进程数量。
- 最终输出格式为
Avg=<平均值>MB
。
- 在所有行处理完成后,执行
完整流程
ps -ylC php-fpm --sort:rss
获取所有php-fpm
进程的详细信息,并按内存使用量排序。awk
对输出的第 8 列(RSS 内存大小)进行累加,并计算平均值。- 输出结果为
Avg=<平均值>MB
,表示所有php-fpm
进程的平均内存使用量。
示例
假设 ps
的输出如下:
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1234 1 20 0 50000 10000 - Ss ? 0:00 php-fpm
4 0 1235 1234 20 0 50000 15000 - S ? 0:00 php-fpm
- 第 8 列(RSS)分别为
10000
和15000
(单位为 KB)。 awk
计算过程:sum = 10000 + 15000 = 25000
cnt = 2
- 平均值:
25000 / (1024 * 2) ≈ 12.21 MB
- 最终输出:
Avg=12.21MB