我过去使用过Valgrind的massif工具来监控内存使用情况。
请问有谁知道如何捕获在Linux Lighttpd服务器上生成的php进程的内存使用情况?
我发现Valgrind无法附加到已经运行的进程(而且我也不会事先知道php进程的PID)。
我只能看到lighttpd的内存使用情况,而看不到通过lighttpd cgi模块生成的PHP进程。
谢谢!
PHP有自己的内存测试函数,我不知道这是否对你有用,但如果你只是想记录它,可以使用:http://php.net/manual/en/function.memory-get-peak-usage.php
echo "Using ", memory_get_peak_usage(1), " bytes of ram.";
你不能使用“ps”工具吗?
$ ps -F -C php-cgi
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
http 10794 10786 0 4073 228 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10795 10794 0 4073 28 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10796 10786 0 4073 228 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
http 10797 10796 0 4613 3544 0 Jun09 ? 00:00:00 /usr/bin/php-cgi
...
RSS是进程在实际内存中占用的大小,单位为千字节。
总结一下,在bash中(有点生疏,抱歉)
#!/bin/bash
total=0
for i in `ps -C php-cgi -o rss=`
do
total=$(($total + $i))
done
echo "Memory usage: $total kb"
# Output: Memory usage: 4540 kb
一句话简述:
total=0; for i in `ps -C php-cgi -o rss=`; do total=$(($total+$i)); done; echo "Memory usage: $total kb";
我知道ps中的内存部分可靠性受到质疑,但至少它可以让你了解使用情况。
http://php.net/manual/zh/function.memory-get-usage.php
该函数可以在脚本内部获取线程所使用的内存量。由于脚本(和线程)存在的时间最多只有几毫秒 - 只需要生成页面的时间 - 因此在 PHP 之外捕获它可能会很困难。
您还可以从服务器获取更精确的调试信息 - 我个人使用 xdebug,当它抛出错误/警告时,会给您提供堆栈跟踪、时间和内存使用情况。您可以通过以下方式在脚本末尾触发:
trigger_error ('Finished', E_USER_NOTICE);
它会为您提供信息。我不确定是否能够捕获数据 - 如果需要,文档中可能有一个函数说明如何操作 - 我模糊地记得见过这样的内容。