【发布时间】:2015-09-18 14:47:04
【问题描述】:
我已经为我的 PHP 代码设置了一个 Cron 作业,使其每 20 分钟运行一次。 但它每次都会杀死 EC2 t2micro 实例。这是服务器日志。 请帮忙。
ip-172-31-42-52 登录:[20332.164336] 内存不足:杀死进程 1241 (java) 得分 174 或牺牲孩子
[20332.192538] 杀死进程 1241 (java) 总-vm:1473180kB, anon-rss:176012kB, file-rss:0kB
[23932.654770] 内存不足:杀死进程 1131 (mysqld) 得分 71 或牺牲孩子
[23932.690310] 终止进程 1131 (mysqld) 总虚拟机:908644kB,匿名 rss:72004kB,文件 rss:0kB
[39839.833448] 内存不足:杀死进程 4616 (mysqld) 得分 68 或牺牲孩子
[39839.845119] 杀死进程 4616 (mysqld) 总虚拟机:908692kB,匿名 rss:68816kB,文件 rss:0kB
[39839.901289] 内存不足:杀死进程 4646 (mysqld) 得分 69 或牺牲孩子
[39839.937446] 杀死进程 4646 (mysqld) 总-vm:908692kB, anon-rss:70392kB, file-rss:0kB
[63862.861894]内存不足:杀死进程6802(mysqld)得分66或牺牲孩子
[63862.875681] 杀死进程 6802 (mysqld) 总虚拟机:908176kB,匿名 rss:66820kB,文件 rss:0kB
[134458.272131] end_request:I/O 错误,开发 xvda,扇区 627665
[134458.288710] end_request:I/O 错误,开发 xvda,扇区 627681
[134458.298582] end_request:I/O 错误,开发 xvda,扇区 5577385
[134458.301842] end_request:I/O 错误,开发 xvda,扇区 5577401
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 5577425
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 5544705
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 1890769
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 1889537
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 1889601
[134458.302578] end_request:I/O 错误,开发 xvda,扇区 1889657
这是 PHP 代码
<?php
$cf = dirname(__FILE__);
if ($cf) chdir($cf);
include_once('/var/www/html/clubberi.com/includes/incl.php');
$conn = ConnectToDatabese();
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include_once('/var/www/html/clubberi.com/adm/cklog.php');
include_once('/var/www/html/clubberi.com/cls/trights.php');
global $rights;
$rights = new TRights();
$rights->conn = $conn;
$rights->Init();
$update_gallery="INSERT INTO GALLERY (NAZ,SCIMG,SCHEDULE,IUSER) VALUES ";
$sql="SELECT ID,NAZ,INSTA_LINK FROM PLACE WHERE INSTA_LINK<>'' AND GENRE=416";
$rs=$conn->Execute($sql) or die("Ошибка выполнения $sql");
set_time_limit(240);
$i=0;
$link = "";
while(!$rs->EOF)
{
$SCHEDULE = GetFieldFromSQL($conn,"SELECT ID FROM SCHEDULE WHERE DATE(ACTIONTIME)=CURDATE() AND PLACE=".$rs->fields['ID'] ,0);
if(!$SCHEDULE){
$MAX_SC_ID = GetFieldFromSQL($conn,"SELECT MAX(ID) FROM SCHEDULE" ,0);
$curid = $MAX_SC_ID+1;
$nos = NewObject($conn,'TSchedule',$curid);
$nos->sf('NAZ','Some party - '.date('d.m.Y'));
$nos->sf('PLACE',$rs->fields['ID']);
$nos->sf('ACTIONTIME',date('d.m.Y'));
$s = $nos->BaseInsert();
$SCHEDULE = $nos->id;
}
$jsonurl = "https://api.instagram.com/v1/locations/".$rs->fields['INSTA_LINK']."/media/recent?client_id=421b46699e074734932d59771fcd1daf";
#echo $jsonurl;
$newUrl = htmlspecialchars_decode($jsonurl);
$json = file_get_contents($newUrl, 0, null, null);
#print_r("<br>".strlen($json));
$json_output = json_decode($json, true);
while(isset($json_output['data'][$i]['images']['standard_resolution']))
{
$CUR_IMG = GetFieldFromSQL($conn,"SELECT ID FROM GALLERY WHERE SCIMG=".sqlstr($json_output['data'][$i]['images']['standard_resolution']['url']) ,0);
if(!$CUR_IMG)
{
$update_gallery.="('image-".$i."',".sqlstr(hsc($json_output['data'][$i]['images']['standard_resolution']['url'])).",".$SCHEDULE.",".sqlstr($json_output['data'][0]['caption']['from']['id'])."),";
$i++;
}
}
$rs->MoveNext();
}
if($i){
$update_gallery = substr($update_gallery, 0, (strlen($update_gallery)-1));
$rs=$conn->Execute($update_gallery) or die("Ошибка выполнения $update_gallery");
echo $i."images";
}else echo "no image ";
?>
【问题讨论】:
-
它在您的日志文件中清楚地显示
Out of memory...尝试改进您的 sql 查询/PHP 代码..
标签: php mysql amazon-ec2