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

thinkphp5 think-worker 使用定時器,4個進程同時執(zhí)行一個晚上,內(nèi)存暴漲!

邊玩邊玩

運行10個小時,內(nèi)存占用390M,并且4個報錯也是內(nèi)存溢出,如何能優(yōu)化呢??

[attach]1686[/attach]

[attach]1685[/attach]

[attach]1684[/attach]
?
?

6933 9 0
9個回答

six

定時器里的業(yè)務(wù)代碼有內(nèi)存泄漏,這個東西我覺得得自己找,把懷疑有內(nèi)存泄漏的業(yè)務(wù)先注釋掉跑著試下,慢慢就定位到了

  • 邊玩邊玩 2019-01-24

    意思是這個內(nèi)存增長的原因還是因為 跑業(yè)務(wù)的內(nèi)存泄漏導(dǎo)致的么...我看看

  • six 2019-01-24

    對啊

  • 邊玩邊玩 2019-01-24

    @1393:我先排查下業(yè)務(wù),然后做個測試

邊玩邊玩

??

  • 暫無評論
邊玩邊玩

我排查了下,業(yè)務(wù)邏輯沒問題,就內(nèi)容采集和入庫,沒其他多余的邏輯啊
?
這里查了下內(nèi)存最多的10個進程

[attach]1688[/attach]
?

  • six 2019-01-24

    把業(yè)務(wù)去掉就知道是不是業(yè)務(wù)問題啦

  • 邊玩邊玩 2019-01-24

    @1393:好,我也業(yè)務(wù)邏輯注釋掉,定時器執(zhí)行時間改5秒,4個進程同事進行,看內(nèi)存是否會保障

  • 邊玩邊玩 2019-01-24

    @1393:純定時器5秒,4個進程同時執(zhí)行,沒有業(yè)務(wù)邏輯,內(nèi)存照樣會增長,只是不會增長那么快

  • six 2019-01-24

    空定時器,我這測試不會有增長啊,你是怎么看出來內(nèi)存漲了的

six
<?php
require_once __DIR__ . '/../Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
$w = new \Workerman\Worker();
$w->onWorkerStart=function(){
? ? $timer_id=Timer::add(0.001,function(){
? ? ? ?
? ? });
};
\Workerman\Worker::runAll();

每秒1000次運行,跑了幾分鐘,定時器運行了幾十萬次,進程內(nèi)存占用情況一直是3116K,沒有絲毫變化USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
wanghai 46204 6.2 0.0 4365440 3116 s004 S+ 12:11下午 0:10.35 php timer.php start

  • 暫無評論
邊玩邊玩

[attach]1689[/attach]
運行2小時? 32M

  • 暫無評論
a7662199

我這邊也遇到這樣的問題, 寫一個socket服務(wù)端對接一個考勤機硬件,因為加了一個定時器,導(dǎo)致內(nèi)存漲的很快,我目前的做法是每小時定時的reload, 還沒有想到比較好的辦法來解決這個問題,?
?

six

奇怪,為啥我的沒問題。
你們自己運行下下面的代碼,看下進程占用內(nèi)存有漲沒。

<?php
require_once __DIR__ . '/../Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
$w = new \Workerman\Worker();
$w->onWorkerStart=function(){
? ? $timer_id=Timer::add(0.001,function(){
? ? ? ?
? ? });
};
\Workerman\Worker::runAll();
  • 法師 2019-01-24

    獲取數(shù)據(jù)肯定是要占用內(nèi)存的。只要內(nèi)存不是無限漲到幾十M就沒問題。

  • 法師 2019-01-24

    一般是往全局?jǐn)?shù)組里存數(shù)據(jù),然后又不刪除,慢慢數(shù)組變得越來越大,然后GG了

  • a7662199 2019-01-24

    @3236:我這邊目前內(nèi)存是無限漲的,一般到3個小時的時候會把線上8G的服務(wù)器爆掉

  • 法師 2019-01-24

    那可能真的是業(yè)務(wù)代碼有內(nèi)存泄漏了

  • a7662199 2019-01-24

    @5367:我的業(yè)務(wù)代碼就存了一個客戶端連接的全局?jǐn)?shù)據(jù)還會定時清除掉

  • a7662199 2019-01-24

    @3236:我的業(yè)務(wù)代碼里面都是一些sql操作,每次讀取的數(shù)據(jù)也不多,下面上傳了我的業(yè)務(wù)代碼截圖

  • 法師 2019-01-24

    那可能有2個地方導(dǎo)致的,一個是你說的那個存客戶端連接的全局?jǐn)?shù)據(jù),一個是定時器部分。
    那個存客戶端連接的全局?jǐn)?shù)據(jù)定時打印下里面的連接數(shù)看下是不是無限增長,如果是可能就是這里導(dǎo)致的。定時器部分有可能是數(shù)據(jù)庫類有問題,每次新建一個mysql連接去獲取,用完連接也沒關(guān)閉,導(dǎo)致開了很多mysql連接占用了很多內(nèi)存。

  • a7662199 2019-01-24

    @3236:好的 感謝指導(dǎo) 我去測試看看

a7662199

[attach]1690[/attach]
?

  • 暫無評論
longhaishan
static $timer_count;
if(++$timer_count > 100) {
    Worker::stopAll();
}

把這個代碼放到定時任務(wù)的尾部,即可解決的你的問題。

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??