资源密集型PHP脚本出现No space left on device (28)错误求助
问题:PHP脚本循环调用子脚本触发"No space left on device (28)"错误
我有两个PHP脚本,父脚本包含1000000次循环,每次循环通过shell_exec()调用子脚本。子脚本每次调用时向MySQL表插入10000条数据,输出响应后退出,父脚本利用该响应执行后续操作。
脚本已设置为无内存限制和无执行时间限制,多数情况下运行正常,但一段时间后会出现**"No space left on device (28)"**错误。通过phpMyAdmin监控发现:
- 16GB内存中,程序持续占用7GB,缓存内存约6.7GB,空闲内存约160MB;
- CPU使用率稳定在20%左右,连接/进程状态均正常;
- 操作开始前,MySQL表预估约15GB,磁盘剩余空间40GB。
父脚本示例代码
<?php //parent script error_reporting(E_ALL); ini_set('max_execution_time', 0); ini_set('memory_limit', -1); ini_set('max_input_vars', 10000); include 'db-connection-script.php'; for($i =0; $i<1000000; $i++){ //restart script starting $mySqlTableNameEscaped=escapeshellarg($mySqlTableName); $cmd = "/usr/bin/php child-script.php $mySqlTableNameEscaped"; $result = shell_exec($cmd); unset($mySqlTableNameEscaped); //response taken here $resultArray = json_decode($result, true); if($resultArray['status'] == "success"){ $returnArrayFromChildScript = $resultArray['returnArrayFromChildScript']; //furthur operations ...... //...... //...... } unset($resultArray); } exit; ?>
子脚本示例代码
<?php //child script error_reporting(E_ALL); ini_set('max_execution_time', 0); ini_set('memory_limit', -1); ini_set('max_input_vars', 10000); include 'db-connection-script.php'; $status = ""; $returnArrayFromChildScript = array(); $mySqlTableName = (isset($_SERVER['argv'][1]) AND $_SERVER['argv'][1] != "") ? $_SERVER['argv'][1] : ""; //mysql operation for selection and insertion of 1000 rows in mySqlTableName sql table is done here. //******/ //******/ //******/ //returnArrayFromChildScript[] array is prepared here $status = "success"; echo json_encode( array( 'status' => $status,'returnArrayFromChildScript'=>$returnArrayFromChildScript) ); exit; ?>
内容的提问来源于stack exchange,提问作者Paarth Pratim Mout
相关产品推荐
相关产品推荐

