本小白仿照官方提供的Web VMStat 监控做一个服务器监控,遇到了一个问题

0

将之前的$worker->process_handle = popen('vmstat 1', 'r');换成$worker->process_handle = popen('top -b -d 1 | grep -E "^(%Cpu)"', 'r');就无法发送数据了,请问有什么区别吗?

menu.saveimg_.savepath20181016131946_.jpg
已邀请:

blogdaren - 乐于分享的PHP码农【http://www.blogdaren.com】

赞同来自: wo642436249

@wo642436249: strace跟踪了下,确实如你描述那样,查阅相关资料,分析应该是 | 管道的问题,管道有个内核缓冲区PIPE_BUF【默认最大4096字节】,fread阻塞直至popen打满管道缓冲区,所以结果表现为一次性返回很多行数据,理解不一定正确,仅供参考。

blogdaren - 乐于分享的PHP码农【http://www.blogdaren.com】

赞同来自:

正则写错了吧,你要提取什么信息?
看上去好像是要: top -b -d 1 | grep -E "^(Cpu)"
如果是这样的话,这样写更简洁: top -b -d 1 | egrep -i "^(cpu)"

要回复问题请先登录注册