openresty 报错:lua entry thread aborted: runtime error
【1】问题现象
(1)本地openresty系统
(2)报错信息
2019/09/10 08:13:55 [error] 2385#2385: *4 lua entry thread aborted: runtime error: /usr/local/lib/ubcservd/bin/../work/bill_timer.lua:1647: attempt to concatenate global 'value' (a nil value)
(3)分析原因
value变量为nil值的场景预先没有考虑到,导致连接字符串时失败。
(4)解决(容错)方案
打印value值时,增加nil值的判断。如下:
ngx.log(ngx.ERR, 'todo and print value: ' .. (value or 'nil'))
【2】问题追思
如上异常,出现过"lua entry thread aborted"以后,这个worker process(即id为2385)到底还存活吗?
注意,这里所谓的存活是相对于C++程序的空指针导致应用程序异常崩溃而言。
模拟场景,分析过程如下:
(1)具体思路:
设计两个定时器,分别设置不同的时间间隔(第一个时间间隔120s短于第二个180s),启动nginx系统:
当第一个定时器执行异常(如上错误)后,观察第二个定时器是否可以正常执行。
(2)源码如下:
[1] 配置文件:
nginx.conf,如下:
worker_processes ;
user root;
events
{
worker_connections ;
}
http
{
default_type application/octet-stream;
sendfile on;
send_timeout ;
keepalive_timeout ;
lua_package_path "/usr/local/lib/ubcservd/lualib/?.lua;;";
lua_package_cpath "/usr/local/lib/ubcservd/lualib/?.so;;";
init_worker_by_lua_file work/bill_timer.lua;
}
[2] 定时器文件:
bill_timer.lua,如下:
local new_timer = ngx.timer.at
local function timer_test_one(permature)
if not premature then
ngx.log(ngx.ERR, "into timer_test_one print value " .. value)
, timer_test)
if not ok then
ngx.log(ngx.ERR, "failed to create timer_test_one timer : ", err)
else
ngx.log(ngx.ERR, ')
end
end
end
local function timer_test_two(permature)
if not premature then
ngx.log(ngx.ERR, "into timer_test_two print ")
, timer_test_two)
if not ok then
ngx.log(ngx.ERR, "failed to create timer_test_two timer : ", err)
else
ngx.log(ngx.ERR, ')
end
end
end
== ngx.worker.id() then
, timer_test_one)
if not ok then
ngx.log(ngx.ERR, "failed to create timer_test_one timer : " .. err)
else
ngx.log(ngx.ERR, ')
end
, timer_test_two)
if not ok then
ngx.log(ngx.ERR, "failed to create timer_test_two timer : " .. err)
else
ngx.log(ngx.ERR, ')
end
end
[3] 启动nginx系统
成功启动,创建3个worker process,如下图:

[4] 日志分析
第一个定时器执行异常中止错误信息,立即观察worker进程情况:

进程id值为2869仍然存在,安然无恙。
第二个定时器执行正常打印信息,所有日志,如下图:

综上所述:“thread aborted” 并非崩溃,仅仅只是当前函数执行失败中止,此函数其余语句不会再执行。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
openresty 报错:lua entry thread aborted: runtime error的更多相关文章
- lua entry thread aborted: runtime error: /usr/../process.lua:448: attempt to concatenate field 'np_sum_duration' (a userdata value)
[1]问题场景原代码 引起问题的原代码,访问数据库,汇总数据后,使用汇总结果报异常: local function amount_sum_fee(cycleid) local select_produ ...
- 【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
问题描述 C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Ap ...
- 【hibernate postgresql】注解@TypeDef/@Enumerated/数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" is of type gender but expression is of type character varying
数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" ...
- 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1
安装PHP时,make步骤报错make: *** [ext/gd/gd.lo] Error 1 /usr/local/src/LAMP+memcahed+catci/php-5.4.0/ext/gd/ ...
- windows 8 安装 oracle 11g 报错:command line option syntax error,type command/? for help
windows 8 安装 oracle 11g 报错:command line option syntax error,type command/? for help 在windows8操作系统上安装 ...
- python——报错ImportError:DLL load failed with error code -1073741795的解决方式
python中导入一个包,import cv2总是报错'ImportError:DLL load failed with error code -1073741795',报错形式: 网上找了好久的解决 ...
- 【Linux基础】mount报错:mount.nfs: Remote I/O error
问题描述:mount 报错:mount.nfs: Remote I/O error 挂载时需要指明版本,由于NFS服务器有多个版本,V2.V3.V4.而且各版本同时运行,因此挂载时需要说明版本号. 由 ...
- eclipse项目无故报错,markers信息为An error occurred while filtering resources
eclipse项目无故报错,markers信息为An error occurred while filtering resources 描述:eclipse项目和resource文件上有红色的叉,其m ...
- CentOS6.5 重启网络报错:Bringing up interface eth0: Error: Connection activation failed: Device not managed by NetworkManager or unavailable
CentOS6.5 重启网络报错: Bringing up interface eth0: Error: Connection activation failed: Device not manage ...
随机推荐
- ASP.NET Core系列:中间件
1. 概述 ASP.NET Core中的中间件是嵌入到应用管道中用于处理请求和响应的一段代码. 2. 使用 IApplicationBuilder 创建中间件管道 2.1 匿名函数 使用Run, Ma ...
- CSS自定义右键菜单
<style> .menu { width: 100px; font-size: 14px; font-family: "微软雅黑"; border: 1px soli ...
- SQLi-LABS Page-2 (Adv Injections) Less27-Less29
Less-27 GET - Error Based- All your UNION and select belong to us 过滤了union 和select的报错注入 查看源码: 使用%09 ...
- CVE-2019-0708漏洞利用复现
CVE-2019-0708漏洞利用复现 距离这个漏洞爆出来也有好几个月了,之前一直忙也没来得及写文档,现在重新做一遍. 准备环境: win7靶机 IP地址:172.16.15.118 Kali攻击机 ...
- JAVA基础复习day-01
1.基础语法 1.1.基础语法规则 1.1.1.Java代码实现 代码示例: public class Hello{ public static void main(String[] args){ S ...
- 笔记6:Django基础
Django-MVT (1)查看python版本号: python -m django --version (2) 创建Django项目 django-admin startproject mysit ...
- 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
- Premiere Pro cc 2019 下载链接
[安装环境]:win7/win8/win10 [64位下载] 百度网盘链接:pan.baidu.com/s/1mUDK5-CLafUDXn2Rsl-Mjw 提取码:ecx4
- jq form表单渲染单选框内容渲染
单选框赋值 单选按钮赋值的主要就在于一个value值和name值对应,但是单选的选中状态按钮是input标签的check(选中)属性 当newattr的属性是1的时候为true,或者当newattr的 ...
- HTML中,input元素的 Disabled属性 所产生的后端无法接收数据的问题
背景 今天从前端提交 form表单 数据时,发现 设置 Disabled 的 input 元素的字段数据在后端无法接收到 原因 查阅资料(来自W3school): disabled 属性规定应该禁用 ...