buaazp / zimg

A lightweight and high performance image storage and processing system.
http://zimg.buaa.us
BSD 3-Clause "New" or "Revised" License
2.69k stars 402 forks source link

进程自动退出 #134

Closed kfeng0806 closed 8 years ago

kfeng0806 commented 8 years ago

进入生产环境后出现进程每隔一段时间自动退出的情况(有上传的时候) 使用的服务器curl方式上传 进程自动停止最后的记录是fail post empty

2016/01/30 12:32:49:687437 [ERROR] 113.103.123.175 fail pic:d556640c20e76a62ae0cf2d1cf241e92 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:33:13:749755 [ERROR] 113.103.123.175 fail pic:b7a8324b77f77711050a2ffb61a682bd w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:33:15:357454 [ERROR] 113.103.123.175 fail pic:8b23dda48e268c886b90c313dcd45592 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:35:21:481275 [ERROR] 180.110.162.25 fail pic:d556640c20e76a62ae0cf2d1cf241e92 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:35:57:582039 [ERROR] 117.82.235.159 fail pic:b7a8324b77f77711050a2ffb61a682bd w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:35:57:678770 [ERROR] 117.82.235.159 fail pic:8b23dda48e268c886b90c313dcd45592 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:36:37:982623 [ERROR] 117.82.235.159 fail pic:d556640c20e76a62ae0cf2d1cf241e92 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:04:734226 [ERROR] 117.34.111.135 fail pic:8b23dda48e268c886b90c313dcd45592 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:04:971952 [ERROR] 117.34.111.85 fail pic:d556640c20e76a62ae0cf2d1cf241e92 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:05:481316 [ERROR] 117.34.111.120 fail pic:b7a8324b77f77711050a2ffb61a682bd w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:29:982198 [ERROR] 140.237.27.167 fail pic:d556640c20e76a62ae0cf2d1cf241e92 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:30:612516 [ERROR] 140.237.27.167 fail pic:b7a8324b77f77711050a2ffb61a682bd w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:38:40:940259 [ERROR] 140.237.27.167 fail pic:8b23dda48e268c886b90c313dcd45592 w:0 h:0 p:1 g:0 x:-1 y:-1 r:0 q:95 f:none
2016/01/30 12:39:57:660700 [ERROR] 104.236.182.194 fail post empty
buaazp commented 8 years ago

curl 采用的是哪种方式?multipart还是raw-post? 拼curl命令的代码贴一下我看看,最近发现multipart解析模块好像有问题。

kfeng0806 commented 8 years ago
<?php
$img_host = 'http://111.111.111.111'; //host IP
$zimg_upload_url = $img_host.'/upload';

$ch = curl_init();

$post_data = file_get_contents($_FILES['file']['tmp_name']); // raw-post

$ext = get_file_ext($_FILES['file']['name']);
$headers = array();
$headers[] = 'Content-Type:'.$ext;

curl_setopt($ch, CURLOPT_URL, $zimg_upload_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$info = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$body = substr($info, $header_size);
curl_close($ch);
?>

附上PHP代码 是raw-post方式上传的 一天挂了5 6次 都是post empty

buaazp commented 8 years ago

在 #132 里提到一种可能的崩溃原因,你试试改下代码然后重新编译,观察观察是否还有问题。

src/zutil.c里的int is_img(const char *filename)函数,把上面一段lua调用注释掉,把下面一段C代码打开,如下:

int is_img(const char *filename)
{
    int isimg = -1;

    /*
    lua_getglobal(settings.L, "is_img");
    lua_pushstring(settings.L, filename);
    if(lua_pcall(settings.L, 1, 1, 0) != 0)
    {
        LOG_PRINT(LOG_WARNING, "lua is_img() failed!");
        return isimg;
    }
    isimg = (int)lua_tonumber(settings.L, -1);
    lua_pop(settings.L, 1);
    */

    char *imgType[] = {"jpg", "jpeg", "png", "gif", "webp"};
    char *lower= (char *)malloc(strlen(filename) + 1);
    if(lower == NULL)
    {
        return -1;
    }
    char *tmp;
    int i;
    for(i = 0; i < strlen(filename); i++)
    {
        lower[i] = tolower(filename[i]);
    }
    lower[strlen(filename)] = '\0';
    for(i = 0; i < 5; i++)
    {
        LOG_PRINT(LOG_DEBUG, "compare %s - %s.", lower, imgType[i]);
        if((tmp = strstr(lower, imgType[i])) == lower)
        {
            isimg = 1;
            break;
        }
    }
    free(lower);
    return isimg;
}
kfeng0806 commented 8 years ago

进程崩溃的原因找到了 和 https://github.com/buaazp/zimg/issues/135 提到的一样 是因为用户上传了某些损坏或者未验证的图片 imagemagick在处理时造成的崩溃 目前在上传接口处添加了图片校验代码并且删除了记录中出错的图片 已经正常运行两天没事了

buaazp commented 8 years ago

损坏图片确实是个麻烦,用户有很多下载不全或者app生成的图片,对imagemagick兼容性是个很大的挑战。