acl-dev / acl

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..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.88k stars 936 forks source link

acl_socket_read 卡住 #281

Closed wxl374 closed 6 months ago

wxl374 commented 2 years ago

您好,我这有个工程使用了 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=...)

at src/redis/redis_list.cpp:354

......

acl 版本:无法确认,头文件和静态库文件的上传时间是 2017 年 7 月 14 号 另外开启了 O3 编译,可以查看的变量很有限

想请问一下,是否有修复过可能导致这个现象的问题?如果没有,当前的栈帧中是否含有有用信息可以帮忙定位这个问题?

zhengshuxin commented 2 years ago

有没有用当前的版本测试过?有复现手段吗?

wxl374 commented 2 years ago

没有用过其他版本;这个问题目前只出过这一次,暂时不确定如何复现。