请教openresty可以pcall trap住c++异常而自行编的nginx with lua不可以

198 views
Skip to first unread message

Yonka Fang

unread,
Mar 28, 2016, 1:14:35 AM3/28/16
to openresty

调c++模块中的函数(如f)
用pcall(f, arg)的方式来处理抛出的异常,在本地环境(openresty)可以,但在测试环境(自行编的nginx with lua)就不行,nginx worker会crash,nginx log如下:
2016/03/28 11:02:26 [alert] 2044#0: worker process 5327 exited on signal 6
OpenCV Error: Unknown error code -10 (Raw image encoder error: Empty JPEG image (DNL not supported)) in throwOnEror, file /builddir/build/BUILD/opencv-2.4.5/modules/highgui/src/grfmt_base.cpp, line 131
terminate called after throwing an instance of 'cv::Exception'
  what():  /builddir/build/BUILD/opencv-2.4.5/modules/highgui/src/grfmt_base.cpp:131: error: (-10) Raw image encoder error: Empty JPEG image (DNL not supported) in function throwOnEror

open-resty:
nginx version: openresty/1.9.7.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.2.19 --add-module=../echo-nginx-module-0.58 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.29 --add-module=../form-input-nginx-module-0.11 --add-module=../encrypted-session-nginx-module-0.04 --add-module=../srcache-nginx-module-0.30 --add-module=../ngx_lua-0.9.20 --add-module=../ngx_lua_upstream-0.04 --add-module=../headers-more-nginx-module-0.29 --add-module=../array-var-nginx-module-0.04 --add-module=../memc-nginx-module-0.16 --add-module=../redis2-nginx-module-0.12 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.14 --add-module=../rds-csv-nginx-module-0.07 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-http_ssl_module

 ⚡ root@localhost  /data/projs/hbase/hbase-1.0.3  ldd /usr/local/openresty/nginx/sbin/nginx | grep lua
        libluajit-5.1.so.2 => /usr/local/openresty/luajit/lib/libluajit-5.1.so.2 (0x00007f56faac4000)



自行编的nginx with lua:
nginx version: nginx/1.8.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/data/thumbnail/nginx --with-debug --with-http_addition_module --with-http_dav_module --with-http_gzip_static_module --with-http_perl_module --with-http_realip_module --with-http_secure_link_module --with-http_ssl_module --add-module=/data/thumbnail/nginx/module/ngx_devel_kit --add-module=/data/thumbnail/nginx/module/lua-nginx-module --add-module=/data/thumbnail/nginx/module/ngx_cache_purge


求助帮忙解释一下原因,以及怎么样让 自行编的nginx with lua也可以pcall处理c++模块中的异常。
谢谢

Yichun Zhang (agentzh)

unread,
Apr 6, 2016, 11:56:55 AM4/6/16
to openresty
Hello!

On Sun, Mar 27, 2016 at 10:14 PM, Yonka Fang wrote:
> 自行编的nginx with lua:
>
> nginx version: nginx/1.8.1
> built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
> built with OpenSSL 1.0.1e-fips 11 Feb 2013
> TLS SNI support enabled
> configure arguments: --prefix=/data/thumbnail/nginx --with-debug
> --with-http_addition_module --with-http_dav_module
> --with-http_gzip_static_module --with-http_perl_module
> --with-http_realip_module --with-http_secure_link_module
> --with-http_ssl_module
> --add-module=/data/thumbnail/nginx/module/ngx_devel_kit
> --add-module=/data/thumbnail/nginx/module/lua-nginx-module
> --add-module=/data/thumbnail/nginx/module/ngx_cache_purge
>
> 求助帮忙解释一下原因,以及怎么样让 自行编的nginx with lua也可以pcall处理c++模块中的异常。
> 谢谢

我猜你自己编的 nginx + ngx_lua 没有使用 LuaJIT 而是使用的是标准 Lua 5.1 解释器?

Regards,
-agentzh

Yonka Fang

unread,
Sep 6, 2016, 8:58:53 AM9/6/16
to openresty
谢谢回复。
时日有些久远了,那个版本已经找不到了。
以后会注意。

在 2016年4月6日星期三 UTC+8下午11:56:55,agentzh写道:
Reply all
Reply to author
Forward
0 new messages