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

多线程upload图片,进程直接崩溃退出 #132

Open linjunnan opened 8 years ago

linjunnan commented 8 years ago

zimg在做图片上传的性能测试时,遇到多线程情况下崩溃的问题。 又抓到错误:PANIC: unprotected error in call to Lua API (jpgempt to call a number value) 测试版本:zimg-3.1.0 测试环境:本地机器4核,zimg默认开启4线程 测试方法:本地命令行上传图片: foreach -w 100 -c 10000 "curl -voa -F 'filename=@/root/test.jpg' 'http://192.168.27.139:60000/upload'" >/dev/null 2>&1 现象:进程退出,并无输出任何错误日志

buaazp commented 8 years ago

奇怪的错误,按理说你这个测试没有涉及到lua调用,我需要仔细追踪一下。

linjunnan commented 8 years ago
  1. “unprotected error in call to Lua API ”这行错误在进程崩溃时并没有必现,只是偶尔出现
  2. zimg配置单线程测试,则不会出现进程退出问题
buaazp commented 8 years ago

启用了memcached没?存储模式是哪种?

linjunnan commented 8 years ago

没有启用memcached,没有采用其它存储后端。 使用默认的zimg.lua配置。

linjunnan commented 8 years ago

似乎问题出现在int is_img(const char *filename)里: 不要使用lua来判断是否图片格式,使用注释掉的C方式来判断即没出现问题

buaazp commented 8 years ago

有道理!很有可能是这个lua调用在多线程下有问题,你用C里面那端代码跑一段时间观察观察。

kfeng0806 commented 8 years ago

我好像也遇到这问题了...zimg没有输出任何错误报告 运行了一两天后进程直接退出了(在将那段lua替换成C后依然出现)

shidenggui commented 8 years ago

supervisor 监护,查看日志,发现在多线程大量(几w张图) upload 的时候,隔十几分钟就崩溃一下,下面是其中一次日志

1098507 2016/04/13 17:43:53:022688 [INFO] xxxxxxx succ post pic:xxxx size:xxxx
1098508 2016/04/13 17:43:54:116663 [DEBUG] File[xxxxxx] is A File.
1098509 2016/04/13 17:43:54:116765 [DEBUG] Path[xxx is A Dir.
1098510 2016/04/13 17:43:54:116786 [DEBUG] Paths Init Finished.
1098511 2016/04/13 17:43:54:116895 [DEBUG] Connect to ssdb server Success
1098512 2016/04/13 17:43:54:117445 [DEBUG] Begin to Start Httpd Server...
1098513 2016/04/13 17:43:54:117475 [INFO] zimg started

正常在 succ post pic 之后的日志应该是

1098489 2016/04/13 17:43:52:987427 [DEBUG] ret_str_unformat: {"ret":true,"info":{"md5":"xxx","size":xxxx}}
buaazp commented 8 years ago

确认一下你们后端用的是哪种存储模式,是不是SSDB?

shidenggui commented 8 years ago

@buaazp 是 ssdb

buaazp commented 8 years ago

可能是因为hiredis长链接超时导致,讨论见 #136

cursesun commented 8 years ago

我也遇到了,多线程上传崩溃,提示unprotected error in call to Lua API,默认配置

buaazp commented 7 years ago

170 应该修复了这个crash,各位可以拉最新的代码测试一下。