環(huán)境
服務(wù)器每天接收 來自Mqtt的中轉(zhuǎn)Http消息大約3500萬條(騰訊限制只能發(fā)http了,其它收費(fèi)較高)
使用 workerman 開啟http服務(wù) 開啟12個(gè)進(jìn)程
將收到的數(shù)據(jù)插入到TDengine時(shí)序數(shù)據(jù)庫,保存最新的一條數(shù)據(jù)至MySQL數(shù)據(jù)庫。
內(nèi)存一直在增長,懷疑內(nèi)存泄漏,然后將onMessage所有代碼刪除,即一個(gè)空項(xiàng)目,也會造成內(nèi)存的增長,直到超出memory_limit上限然后報(bào) 65280 錯(cuò)誤后業(yè)務(wù)無法運(yùn)行。
將進(jìn)程改為48個(gè)進(jìn)程后問題依舊,只是增長的速度慢了一點(diǎn)而已。時(shí)間長了之后還是一樣的。
$http_worker = new Worker("http://0.0.0.0:8090");
$http_worker->count = 12;
$http_worker->name = 'BMS';
$http_worker->reusePort = true;
$http_worker->onWorkerStart = function ($worker) {
$this->output("Worker start");
// 實(shí)例化
try {
$this->tdengine = new Connection($this->tdengine_host, $this->tdengine_port, $this->tdengine_username, $this->tdengine_password, $this->tdengine_database);
// 連接
$this->tdengine->connect();
$this->output("TDengine connected, Version:" . \TDengine\CLIENT_VERSION);
$this->tdengineBMS = new TDengineBMS($this->tdengine);
} catch (TDengineException $e) {
$this->output("TDengine connect failed:" . $e->getMessage());
return;
}
// onMessage 方法內(nèi)無代碼。
$worker->onMessage = [$this, 'onMessage'];
};
Worker::runAll();
private function output(string $message): void
{
// 守護(hù)模式下不輸出日志
if (!defined('DAEMON')) {
echo $message . PHP_EOL;
}
}
內(nèi)存一直增長的原因不明,感謝版主大大解答疑惑。
重新沒用thinkphp創(chuàng)建了一個(gè)test.php的項(xiàng)目,內(nèi)存也增加。不知為何。
試下不用thinkphp,直接用workerman,空業(yè)務(wù)返回helloworld,看下內(nèi)存是否是無限增長
http://wtbis.cn/doc/workerman/getting-started/simple-example.html 從這里復(fù)制的,經(jīng)測試用workerman 4.2.1版本內(nèi)存不會增長,而thinkphp-wokerman的是3.5.34的內(nèi)存會一直增長
先說workerman
特意下載workerman 3.5.34 試了下,沒有無限增長。
從你的截圖看,只是到了8M左右,沒有無限增長。
think-worker 沒測試
think-worker 測試了下,確實(shí)存在內(nèi)存泄露,可能是thinkphp官方哪里沒弄好。
另外workerman快發(fā)布5.0了,3.0已經(jīng)不維護(hù)了。
如果可以的話建議用webman,可以使用tp的組件,開發(fā)起來和tp差不多
感謝大佬,我單獨(dú)把workerman升到了4.2.1版本,目前內(nèi)存沒有增長了,還是用的thinkphp,停留在了36M,有時(shí)候會跳到37M然后又會回到36M,這是之前從未有過的現(xiàn)象。問題已解決,十分感謝。
如果需要workman結(jié)合thinkphp運(yùn)行的話這里倒是有一個(gè)TP的Workman擴(kuò)展:
https://github.com/axguowen/think-webworker
特點(diǎn):
1、深度兼容ThinkPHP,現(xiàn)有ThinkPHP業(yè)務(wù)代碼幾乎不用做任何更改即可使用
2、性能比傳統(tǒng)php-fpm環(huán)境高10-20倍
3、支持ThinkPHP的Cookie使用
4、支持ThinkPHP的Session使用
5、支持ThinkPHP的多應(yīng)用模式
6、支持ThinkPHP的多應(yīng)用中間件
7、多應(yīng)用模式支持配置應(yīng)用入口文件
8、多應(yīng)用模式支持配置應(yīng)用目錄以支持composer依賴包的應(yīng)用
有興趣的話可以試試。