20

我过去曾使用 valgrinds massif 工具来监控内存使用情况。

有谁知道如何捕获在 linux lighttpd 服务器上生成的 php 进程的内存使用情况?

我发现 Valgrind 无法附加到预运行进程(而且我不会事先知道 php 进程的 PID)

我只看到 lighttpd 的内存使用情况,而不是由 lighttpd cgi 模块生成的 PHP 进程。

提前致谢。

4

4 回答 4

16

PHP有它自己的内存测试功能,我不知道这对你有没有用,但如果你只想记录它,你可以使用: http: //php.net/manual/en/function.memory-get-峰值使用.php

    echo "Using ", memory_get_peak_usage(1), " bytes of ram.";
于 2009-07-02T08:01:47.823 回答
9

你不能使用'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中内存部分的可靠性受到质疑,但至少它让您了解使用情况。

于 2009-07-02T09:46:52.883 回答
4

除了上面显示的内置命令之外,您还可以使用XHProf来分析您的脚本,并使用XHGui在一个漂亮的浏览器应用程序中显示分析结果。您可以获得有关您的方法如何使用内存以及应用程序中的内存使用高峰是什么的深入信息。

于 2012-07-24T21:44:08.950 回答
2

http://php.net/manual/en/function.memory-get-usage.php

应该从脚本本身中为您提供线程正在使用的内存量。我认为因为脚本(和线程)最多只存在几毫秒 - 只是生成页面所需的时间 - 在 PHP 之外捕获它可能很困难。

  • B计划

您还可以从服务器获取可能更准确的调试信息 - 我个人使用 xdebug,当它抛出错误/通知时,它会为您提供堆栈跟踪、时间和内存使用情况。您可以在脚本末尾触发它:

trigger_error ('Finished', E_USER_NOTICE);

它会给你信息。我不确定是否能捕捉到数据——如果你需要的话,文档中可能有一个关于如何捕捉的函数——我依稀记得看过一个。

于 2009-07-02T08:01:21.443 回答