C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
您好,我这有个工程使用了 acl 的 redis_client 用于从 redis list 中获取任务,但最近发现有一个进程卡在了 acl_socket_read 无法恢复,栈如下:
0 0x00007f9d0554625d in read () from /lib64/libpthread.so.0
1 0x000000000084883a in acl_socket_read (fd=5, buf=0x7f9cd40041b0, size=, timeout=, fp=, arg=)
at src/stdlib/sys/acl_sys_socket.c:308
2 0x0000000000837ae9 in sys_read (in=0x7f9cd4003fd0, buf=0x7f9cd40041b0, size=8192) at src/stdlib/acl_vstream.c:289
3 0x000000000083968d in read_to_buffer (size=, buf=, fp=0x7f9cd4003fd0) at src/stdlib/acl_vstream.c:345
4 read_buffed (fp=0x7f9cd4003fd0) at src/stdlib/acl_vstream.c:357
5 acl_vstream_read (fp=0x7f9cd4003fd0, buf=0x7f9cf9a54550, size=1) at src/stdlib/acl_vstream.c:995
6 0x0000000000824a74 in acl::istream::read (this=0x200aee0, buf=, size=, loop=) at src/stream/istream.cpp:31
7 0x0000000000824bd0 in acl::istream::read (this=this@entry=0x200aee0, ch=@0x7f9cf9a54550: 16 '\020') at src/stream/istream.cpp:75
8 0x000000000082343f in acl::redis_client::get_redis_object (this=this@entry=0x200aec0, pool=pool@entry=0x7f9cd4000910) at src/redis/redis_client.cpp:300
9 0x0000000000823870 in acl::redis_client::run (this=0x200aec0, pool=0x7f9cd4000910, req=..., nchildren=nchildren@entry=0, rw_timeout=rw_timeout@entry=0x7f9cf9a54610)
at src/redis/redis_client.cpp:387
10 0x000000000081d7cf in acl::redis_command::run (this=0x7f9cf9a548a8, nchild=nchild@entry=0, timeout=timeout@entry=0x7f9cf9a54610) at src/redis/redis_command.cpp:680
11 0x0000000000821b15 in acl::redis_list::bpop (this=this@entry=0x7f9cf9a548a0, out=...) at src/redis/redis_list.cpp:416
12 0x0000000000822183 in acl::redis_list::bpop (this=this@entry=0x7f9cf9a548a0, cmd=cmd@entry=0x8e1f86 "BRPOP", keys=std::vector of length 1, capacity 1 = {...},
timeout=timeout@entry=0, result=...) at src/redis/redis_list.cpp:410
13 0x00000000008221d5 in acl::redis_list::brpop (this=this@entry=0x7f9cf9a548a0, keys=std::vector of length 1, capacity 1 = {...}, timeout=timeout@entry=0, result=...)
您好,我这有个工程使用了 acl 的 redis_client 用于从 redis list 中获取任务,但最近发现有一个进程卡在了 acl_socket_read 无法恢复,栈如下:
0 0x00007f9d0554625d in read () from /lib64/libpthread.so.0
1 0x000000000084883a in acl_socket_read (fd=5, buf=0x7f9cd40041b0, size=, timeout=, fp=, arg=)
2 0x0000000000837ae9 in sys_read (in=0x7f9cd4003fd0, buf=0x7f9cd40041b0, size=8192) at src/stdlib/acl_vstream.c:289
3 0x000000000083968d in read_to_buffer (size=, buf=, fp=0x7f9cd4003fd0) at src/stdlib/acl_vstream.c:345
4 read_buffed (fp=0x7f9cd4003fd0) at src/stdlib/acl_vstream.c:357
5 acl_vstream_read (fp=0x7f9cd4003fd0, buf=0x7f9cf9a54550, size=1) at src/stdlib/acl_vstream.c:995
6 0x0000000000824a74 in acl::istream::read (this=0x200aee0, buf=, size=, loop=) at src/stream/istream.cpp:31
7 0x0000000000824bd0 in acl::istream::read (this=this@entry=0x200aee0, ch=@0x7f9cf9a54550: 16 '\020') at src/stream/istream.cpp:75
8 0x000000000082343f in acl::redis_client::get_redis_object (this=this@entry=0x200aec0, pool=pool@entry=0x7f9cd4000910) at src/redis/redis_client.cpp:300
9 0x0000000000823870 in acl::redis_client::run (this=0x200aec0, pool=0x7f9cd4000910, req=..., nchildren=nchildren@entry=0, rw_timeout=rw_timeout@entry=0x7f9cf9a54610)
10 0x000000000081d7cf in acl::redis_command::run (this=0x7f9cf9a548a8, nchild=nchild@entry=0, timeout=timeout@entry=0x7f9cf9a54610) at src/redis/redis_command.cpp:680
11 0x0000000000821b15 in acl::redis_list::bpop (this=this@entry=0x7f9cf9a548a0, out=...) at src/redis/redis_list.cpp:416
12 0x0000000000822183 in acl::redis_list::bpop (this=this@entry=0x7f9cf9a548a0, cmd=cmd@entry=0x8e1f86 "BRPOP", keys=std::vector of length 1, capacity 1 = {...},
13 0x00000000008221d5 in acl::redis_list::brpop (this=this@entry=0x7f9cf9a548a0, keys=std::vector of length 1, capacity 1 = {...}, timeout=timeout@entry=0, result=...)
......
acl 版本:无法确认,头文件和静态库文件的上传时间是 2017 年 7 月 14 号 另外开启了 O3 编译,可以查看的变量很有限
想请问一下,是否有修复过可能导致这个现象的问题?如果没有,当前的栈帧中是否含有有用信息可以帮忙定位这个问题?