Loading...
This site is best viewed in a modern browser with JavaScript enabled.
Something went wrong while trying to load the full version of this site. Try hard-refreshing this page to fix the error.
openresty 1.15版本 arm64环境下,概率性出现table取值错误(number变为bool))
boy
环境
openresty1.15,jit使用的是openresty维护的分支(2020年1月份的),硬件是arm64
问题
几百台设备,只有几台设备的某个进程会持续报错,attempt to perform arithmetic on local ‘id’(a boolean value),代码的第二行报的错
代码行(session是一个lua module定义的可以认为全局变量的table,business是session的一个table)
local id = session.business['id']
local test = id + 1
gdb分析
a. 通过gdb分析,session的内存如下:
lval (TValue
)0x40031477b240
...
key:
string: "business"(len 8 )
value:
table: (TValue
)0x4003169120f8
...
b. 继续打印0x4003169120f8的内容
lval (TValue*)0x4003169120f8
...
key:
string: "id"(len 2)
value:
number 0
c. 上面的内存信息,是在报错的时候,打印的(gdb挂断点),也就是说business table里面id存的value还是一个number类型的0,但是取出来的时候,却变成了一个bool的true(几百台设备,只有几台出问题,而且是某个进程,一旦出问题后,会一直报错)