【发布时间】:2014-01-30 18:23:57
【问题描述】:
您好,我正在使用下面的代码来尝试获取 PHP 中 java 的内存使用情况(在 linux 上)
返回 PID 的脚本部分有效,但获取其内存使用情况的代码似乎无效。
这是我的代码:
$PID = exec('ps -eo pid,comm | grep \'java$\' | awk \'{print $1}\' | head -1');
$stats = explode("\n", shell_exec('pmap $(pgrep java) | grep \'total\\|\\:\''));
for ($i = 0; $i < count($stats); $i += 2) {
if (strpos($stats[$i], "$PID") === 0) {
preg_match('/\d+/', $stats[$i+1], $preRes);
$res = $preRes[0];
}
}
echo $res;
谁能看到我做错了什么?每次都返回 0 作为内存使用量。
【问题讨论】:
-
这里不需要在
$PID周围使用双引号:strpos($stats[$i], "$PID") -
如何简化代码以便调试?不要做
func(func(func(....)))嵌套。将每个阶段的输出/返回值捕获到单独的单独代码块中,这样您就可以看到在哪个阶段发生了问题。记住:写代码很难,调试更难。如果您编写的代码超出了您的编写能力,那么根据定义,您将无法对其进行调试。 -
向我们展示您的 shell 命令的示例输出。
-
你能不能稍微简化一下?例如,
ps auxw | grep \'java$\' | awk '{print $2,$5,$6}'每行输出PID Virtual-Memory Physical-Memory