国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

本小白仿照官方提供的Web VMStat 監(jiān)控做一個服務器監(jiān)控,遇到了一個問題

wo642436249

將之前的$worker->process_handle = popen('vmstat 1', 'r');換成$worker->process_handle = popen('top -b -d 1 | grep -E "^(%Cpu)"', 'r');就無法發(fā)送數(shù)據了,請問有什么區(qū)別嗎?

3064 2 0
2個回答

phpcreeper

正則寫錯了吧,你要提取什么信息?
看上去好像是要: top -b -d 1 | grep -E "^(Cpu)"
如果是這樣的話,這樣寫更簡潔:?top -b -d 1 | egrep -i "^(cpu)"

  • wo642436249 2018-10-16

    我那樣寫也沒問題,現(xiàn)在的問題是如果直接在linux終端輸入這個命令,就是每秒打印一次。但是在php里運行,很長時間不返回數(shù)據,返回數(shù)據的時候一次性返回很多行需要的數(shù)據。

  • wo642436249 2018-10-16

    不用top了,換成sar了,top不像vmstat一樣,中斷方式去執(zhí)行的,所以不會每在終端打印一次數(shù)據就給worker發(fā)送一次數(shù)據

phpcreeper

@wo642436249: strace跟蹤了下,確實如你描述那樣,查閱相關資料,分析應該是 | 管道的問題,管道有個內核緩沖區(qū)PIPE_BUF【默認最大4096字節(jié)】,fread阻塞直至popen打滿管道緩沖區(qū),所以結果表現(xiàn)為一次性返回很多行數(shù)據,理解不一定正確,僅供參考。

年代過于久遠,無法發(fā)表回答
??