MA
хотя мне ещё не нравится состояние буфера
Size: a a a
MA
MF
source ./third_party/luajit/src/luajit-gdb.py
в файл .gdbinit
.V
gdb -ex "generate-core-file" -p 1169082
(gdb) lj-stackИз замеченных мной странностей. В приложенном выше трейсе, в буфере присутствует строка
0x41f37f08:0x41f37f28 [ ] 5 slots: Red zone
0x41f37f00 [ M]
0x41f37d80:0x41f37ef8 [ ] 48 slots: Free stack slots
0x41f37d78 [ T ]
0x41f37d70 [S ] FRAME: dummy L
(gdb) lj-stack 0x4058f020
0x405a0430:0x405a0450 [ ] 5 slots: Red zone
0x405a0428 [ M]
0x405a0318:0x405a0420 [ ] 34 slots: Free stack slots
0x405a0310 [ T ]
0x405a0308 [ ] VALUE: table @ 0x4059f120 (asize: 0, hmask: 0x1)
0x405a0300 [ ] VALUE: string "headers" @ 0x40c35a18
0x405a02f8 [ ] VALUE: table @ 0x4059f090 (asize: 0, hmask: 0x1)
0x405a02f0 [ ] VALUE: table @ 0x40d31950 (asize: 0, hmask: 0x1)
0x405a02e8 [ ] VALUE: nil
0x405a02e0 [ ] VALUE: string "http://10.9.7.170:8080/energomera/?VOLTA()" @ 0x40d1e3d8
0x405a02d8 [ ] VALUE: string "GET" @ 0x410539a8
0x405a02d0 [ B ] VALUE: userdata @ 0x414f6ce0
0x405a02c8 [ ] FRAME: [M] delta=8, C function @ 0x5daf80
0x405a02c0 [ ] VALUE: number 174320.00000037957
0x405a02b8 [ ] VALUE: trace 0x67 @ 0x4069fb58
0x405a02b0 [ ] VALUE: table @ 0x40d31950 (asize: 0, hmask: 0x1)
0x405a02a8 [ ] VALUE: nil
0x405a02a0 [ ] VALUE: string "http://10.9.7.170:8080/energomera/?VOLTA()" @ 0x40d1e3d8
0x405a0298 [ ] VALUE: string "GET" @ 0x410539a8
0x405a0290 [ ] VALUE: table @ 0x414f85c0 (asize: 0, hmask: 0x1)
0x405a0288 [ ] FRAME: [LP] delta=6, Lua function @ 0x41048b38, 2 upvalues, "@builtin/http.client.lua":316
0x405a0280 [ ] VALUE: string "http://10.9.7.170:8080/energomera/?VOLTA()" @ 0x40d1e3d8
0x405a0278 [ ] VALUE: number 3
0x405a0270 [ ] VALUE: string "VOLTA" @ 0x416a4068
0x405a0268 [ ] VALUE: string "VOLTA(3)" @ 0x413b3f40
0x405a0260 [ ] VALUE: table @ 0x40178230 (asize: 0, hmask: 0x7)
0x405a0258 [ ] FRAME: [L] delta=2, Lua function @ 0x414f8708, 3 upvalues, "@/home/leon/Documents/git/home/dombrain-service/devices/energomeraDombrain.lua":29
0x405a0250 [ ] VALUE: table @ 0x40d309b0 (asize: 0, hmask: 0xf)
0x405a0248 [ ] FRAME: [L] delta=5, Lua function @ 0x40146cc8, 0 upvalues, "@/home/leon/Documents/git/home/dombrain-service/dombrainSensors.lua":113
0x405a0240 [ ] VALUE: number 60
0x405a0238 [ ] VALUE: number 1616420280
0x405a0230 [ ] VALUE: table @ 0x4058eab8 (asize: 0, hmask: 0x7)
0x405a0228 [ ] VALUE: table @ 0x40d309b0 (asize: 0, hmask: 0xf)
0x405a0220 [ ] FRAME: [CP] delta=1, Lua function @ 0x4058ea20, 3 upvalues, "@/home/leon/Documents/git/home/dombrain-service/dombrainSensors.lua":23
0x405a0218 [S ] FRAME: dummy L
:22.7,\"Humidity\":38.0,\"DewPoint\":7.7
, это ответ на запрос из другого модуля.ОБ
0x4059f120
`V
(gdb) lj-tab 0x4059f120
Array part: 0 slots
Hash part: 2 nodes
0x4059ee08: { string "transfer-encoding" @ 0x40380610 } => { table @ 0x4059ee40 (asize: 3, hmask: 0x0) }; next = 0x0
0x4059ee20: { string "connection" @ 0x401183b8 } => { table @ 0x4059f148 (asize: 3, hmask: 0x0) }; next = 0x0
(gdb)
ОБ
lj-tab
и lj-val
поискать что-то подозрительное в этих хидерахheaders
{"transfer-encoding
" => 0x4059ee40
; connection
=> 0x4059f148
}MA
tarantoolctl enter
не подключается. Вероятно где-то образовался бесконечный цикл...Tarantool 2.6.2-0-g34d504d7d
В документации нашел подходящий раздел: "Просмотр состояния сервера".perf record -g -p
.perf report -n -g --stdio
Но не понятно, какой файбер, какие инструкции съели процессор.71.85%--http_parse_header_lineК сожалению мне не понятно - куда копать дальше.
28.15%--luaT_httpc_request
V
http://10.9.7.170:8080/energomera/?VOLTA()
должен был прийти ответ: [1.895,226.605,2.134]В gdb не могу найти таблицу с реальным ответом. А реальный ответ, теоретически мог быть битым
V
(gdb) lj-tab 0x4059f090Получается, что не было ничего в теле ответа. Клиент не ответил
Array part: 0 slots
Hash part: 2 nodes
0x4059f0b8: { string "status" @ 0x413b5920 } => { number 408 }; next = 0x0
0x4059f0d0: { string "reason" @ 0x40118398 } => { string "Timeout was reached" @ 0x4059f0f0 }; next = 0x0
MA
(gdb) lj-tab 0x4059f090Получается, что не было ничего в теле ответа. Клиент не ответил
Array part: 0 slots
Hash part: 2 nodes
0x4059f0b8: { string "status" @ 0x413b5920 } => { number 408 }; next = 0x0
0x4059f0d0: { string "reason" @ 0x40118398 } => { string "Timeout was reached" @ 0x4059f0f0 }; next = 0x0
p *bufp
MA
V
p *bufp
(gdb) frame 0Я как обезьяна тыкаю в клавиши, слабо понимаю что делают :)
#0 http_parse_header_line (prsr=prsr@entry=0x7f61a217fe60, bufp=bufp@entry=0x7f61a217fe58,
end_buf=end_buf@entry=0x7f61a1778078 "e\":22.7,\"Humidity\":38.0,\"DewPoint\":7.7,\"Pressure\":992.3},\"MHZ19B\":{\"Model\":\"B\",\"CarbonDioxide\":400,\"Temperature\":25.0},\"PressureUnit\":\"hPa\",\"TempUnit\":\"C\"}}oad\r\nAccess-Control-Allow-Origin: *\r\nAccess-"..., max_hname_len=max_hname_len@entry=32) at ./src/lib/http_parser/http_parser.c:227
227 prsr->hdr_name_idx = 0;
(gdb) p *prsr
$25 = {
hdr_value_start = 0x7f61a177806f "chunked\r\ne\":22.7,\"Humidity\":38.0,\"DewPoint\":7.7,\"Pressure\":992.3},\"MHZ19B\":{\"Model\":\"B\",\"CarbonDioxide\":400,\"Temperature\":25.0},\"PressureUnit\":\"hPa\",\"TempUnit\":\"C\"}}oad\r\nAccess-Control-Allow-Origin: *"..., hdr_value_end = 0x7f61a1778076 "\r\ne\":22.7,\"Humidity\":38.0,\"DewPoint\":7.7,\"Pressure\":992.3},\"MHZ19B\":{\"Model\":\"B\",\"CarbonDioxide\":400,\"Temperature\":25.0},\"PressureUnit\":\"hPa\",\"TempUnit\":\"C\"}}oad\r\nAccess-Control-Allow-Origin: *\r\nAcces"...,
http_major = 1, http_minor = 1, hdr_name = 0x362b210 "transfer-encoding", hdr_name_idx = 0}
(gdb) p *bufp
$26 = 0x981974ccc074 <error: Cannot access memory at address 0x981974ccc074>
(gdb)
p *bufpвидимо не то выводит, в вот
p *prsrчто-то вывел, похожее на содержимое ответа на другой запрос (точно не на
http://10.9.7.170:8080/energomera/?VOLTA()
).V
MA
MF
MA
int http_parse_header_line(struct http_parser *prsr, char **bufp, const char *end_buf, int max_hname_len)
V
(gdb) frame 0
#0 http_parse_header_line (prsr=prsr@entry=0x7f61a217fe60, bufp=bufp@entry=0x7f61a217fe58,
end_buf=end_buf@entry=0x7f61a1778078 "e\":22.7,\"Humidity\":38.0,\"DewPoint\":7.7,\"Pressure\":992.3},\"MHZ19B\":{\"Model\":\"B\",\"CarbonDioxide\":400,\"Temperature\":25.0},\"PressureUnit\":\"hPa\",\"TempUnit\":\"C\"}}oad\r\nAccess-Control-Allow-Origin: *\r\nAccess-"..., max_hname_len=max_hname_len@entry=32) at ./src/lib/http_parser/http_parser.c:227
227 prsr->hdr_name_idx = 0;
(gdb) p (char*)bufp
$36 = 0x7f61a217fe58 "t\300\314t\031\230"
(gdb)
MF
int http_parse_header_line(struct http_parser *prsr, char **bufp, const char *end_buf, int max_hname_len)
A
VG