phpにてヘッドレスchromeを使っています。
問題点は、バックグラウンドでchrome.exeが少しずつ溜まっていっており、4時間ほどでメモリ50Gほど使ってしまっています。
およそ4時間の実行で60個位chrome.exeが並んでいたと思います。
処理内で $browser->close();は行っています。
現在は4時間ごとに、「TASKKILL /F /IM chrome.exe」のbatファイルを走らせてとりあえず対策はしています。
バックグラウンドのchrome.exeを消すとメモリは回復します。
並列でPHPを走らせており、1時間に2000回程はヘッドレスchromeの呼出しを繰り返しており、4時間ごとにすべての並列処理を停止し、インターバルを20分程取りbatファイルの実行が不便である事。
メモリ消費量が多く、操作が出来なくなる事や画面表示がおかしくなったりします。
例えば、開いてから指定時間で開いたヘッドレスchromeを落とすなどが出来れば解決しそうにも思います。
なにか解決策などありませんでしょうか?
追加です。
環境は WIN-SERVER 2016 PHPは7.2 APACHE chromeは最新バージョンになります。
$browserFactory = new BrowserFactory(); $agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"; // headless chromeの開始 $browser = $browserFactory->createBrowser([ 'windowSize' => [1920, 1000], 'enableImages' => false, 'startupTimeout' => 360, 'keepAlive' => true, ] ); $page = $browser->createPage(); $page->setUserAgent($agent); if(!empty($url_ary)){ foreach($url_ary as $key=>$url){ $navigation = $page->navigate($url); $navigation->waitForNavigation(@HeadlessChromium\Page::NETWORK_IDLE); $evaluation = $page->evaluate('document.documentElement.innerHTML'); $value = $evaluation->getReturnValue(); $source=str_replace(array("\r\n","\r","\n","\t"), '', $value);//改行削除 $source_ary[$key]=$source; } } $browser->close();
$url_aryにURLの配列を入れてLOOPしています。
あなたの回答
tips
プレビュー