【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的更多相关文章

  1. 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 ...

  2. 【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application

    问题描述 C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Ap ...

  3. 【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" ...

  4. 安装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/ ...

  5. 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操作系统上安装 ...

  6. python——报错ImportError:DLL load failed with error code -1073741795的解决方式

    python中导入一个包,import cv2总是报错'ImportError:DLL load failed with error code -1073741795',报错形式: 网上找了好久的解决 ...

  7. 【Linux基础】mount报错:mount.nfs: Remote I/O error

    问题描述:mount 报错:mount.nfs: Remote I/O error 挂载时需要指明版本,由于NFS服务器有多个版本,V2.V3.V4.而且各版本同时运行,因此挂载时需要说明版本号. 由 ...

  8. eclipse项目无故报错,markers信息为An error occurred while filtering resources

    eclipse项目无故报错,markers信息为An error occurred while filtering resources 描述:eclipse项目和resource文件上有红色的叉,其m ...

  9. 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 ...

随机推荐

  1. 钉钉企业内部H5微应用开发

    企业内部H5微应用开发 分为 服务端API和前端API的开发,主要涉及到进入应用免登流程和JSAPI鉴权. JSAPI鉴权开发步骤: 1.创建H5微应用 登入钉钉开放平台(https://open-d ...

  2. Java性能 -- CAS乐观锁

    synchronized / Lock / CAS synchronized和Lock实现的同步锁机制,都属于悲观锁,而CAS属于乐观锁 悲观锁在高并发的场景下,激烈的锁竞争会造成线程阻塞,而大量阻塞 ...

  3. python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)

    插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...

  4. Vue.js 源码分析(七) 基础篇 侦听器 watch属性详解

    先来看看官网的介绍: 官网介绍的很好理解了,也就是监听一个数据的变化,当该数据变化时执行我们的watch方法,watch选项是一个对象,键为需要观察的数据名,值为一个表达式(函数),还可以是一个对象, ...

  5. cent OS 7 安装谷歌浏览器

    我直接写一个shell 脚本,  install_google.sh,  bash 命令直接运行就好, 脚本内容如下: (切换root用户执行) set -e  # 出错即退出 echo " ...

  6. maven 学习---用Eclipse创建一个Maven Web项目

    下面是使用 Eclipse 来创建一个Maven Web项目的说明.这是相当简单的. 现在让我们开始吧! 1: 启动 Eclipse, 点击 File->New->Other 2: 在弹出 ...

  7. HeadFirst设计模式---观察者

    表达公式 注册者 + 订阅者 = 观察者模式 设计气象站 气象站接口 /** ** 布告板 ** @author lollipop ** @since 2019/11/24 **/ public in ...

  8. VMware虚拟机可与Win10物理机互ping并可访问互联网的设置方法

     一.系统环境: VMware 15.Windows 10 1903.Windows 7 虚拟机 二.具体步骤: 1.Win10物理机,控制面板-所有控制面板项-网络连接-物理网卡适配器右键-属性-共 ...

  9. html--前端jquery基础实例

    一.左边的菜单栏 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. sed和awk练习及知识点

    一.针对/etc/passwd操作 1.sed操作,将文件中的第九行至第十五行复制到第16行下. [root@ns1 lianxi]# sed '9,15H;16G' /etc/passwd 2.用a ...