多线程使用zlog偶尔会发生core dump
@难易 你好,想跟你请教个问题:
项目中使用到了你的zlog 1.2.12版本(目前最新版本了吧),我们的项目使用是线程池并发处理,测试的时候偶尔会出现core dump的情况,core dump原因主要是使用了dzlog函数打印了十六进制,不知道与这个有没有关系,跟踪core文件如下:
#0 0x00007f6db3cef9c1 in vfprintf () from /lib64/libc.so.6 #1 0x00007f6db3d1a079 in vsnprintf () from /lib64/libc.so.6 #2 0x00007f6db6a775c9 in zlog_buf_vprintf (a_buf=a_buf@entry=0x7f6cfc017cc0, format=0x7f6d8b357e20 "-", ' ' <repeats 13 times>, "312375276335303334316304 = [314.22332130070/$!%n333324&235270O)40273TgGxXf~353j.233s7z*\321c)04v323215275O22227031666330332253272677026z33231312362331243;241324,]263230177/27265234H]233374327372205220377224X21435066D340370Jw23024037131261364w261G201321242r35026f236tt17722030125362232_265][pack.c:1678]", args=0x7f6cfc0109a8) at buf.c:220 #3 0x00007f6db6a7f2f1 in zlog_spec_write_usrmsg (a_spec=<optimized out>, a_thread=0x7f6cfc008aa0, a_buf=0x7f6cfc017cc0) at spec.c:249 #4 0x00007f6db6a7a8be in zlog_format_gen_msg (a_format=0x169ad20, a_thread=a_thread@entry=0x7f6cfc008aa0) at format.c:156 #5 0x00007f6db6a7d88b in zlog_rule_output_dynamic_file_rotate (a_rule=0x16d7ee0, a_thread=0x7f6cfc008aa0) at rule.c:294 #6 0x00007f6db6a78865 in zlog_category_output (a_category=0x16e9ce0, a_thread=a_thread@entry=0x7f6cfc008aa0) at category.c:229 #7 0x00007f6db6a84078 in dzlog (file=0x7f6db5fa0e8a "liblog.c", filelen=8, func=0x7f6db5fa0e93 <__FUNCTION__.7907> "logDebug", funclen=8, line=82, level=20, format=0x7f6d8b357e20 "-", ' ' <repeats 13 times>, "312375276335303334316304 = [314.22332130070/$!%n333324&235270O)40273TgGxXf~353j.233s7z*\321c)04v323215275O22227031666330332253272677026z33231312362331243;241324,]263230177/27265234H]233374327372205220377224X21435066D340370Jw23024037131261364w261G201321242r35026f236tt17722030125362232_265][pack.c:1678]") at zlog.c:906 #8 0x00007f6db5fa0cf7 in logDebug (loglevel=13, frm=0x7f6db4ad3007 "%20s = [%s][%s:%d]") at liblog.c:82 #9 0x00007f6db4ad218b in _Pack_E4 (sMsg=0x7f6d8b35d900 "000122", uMsgLen=0x7f6d8b38dd44, sMsg=0x7f6d8b35cf60) at pack.c:1678 #10 0x00007f6db5762f5f in _Flow (sInMsg=0x7f6d7805b098 "070026ABCDEFGHIJKLMNOPQRSTUVWXYZ;K00400", uInLen=39, sOutMsg=0x7f6d8b37dd50 "", uOutLen=0x7f6d8b38dd44) at work_flow.c:723 #11 0x00007f6db5327ddf in _Flow_Read (set=0x606400 <s_set>, len=1, s=0x7f6d78053470, iFlag=0) at main_flow.c:251 #12 0x00007f6db53285a0 in _Main_Flow_Read (arg=0x16fa7a8) at main_flow.c:421 #13 0x00007f6db61a48b7 in thread_routine (arg=0x0) at threadpool.c:213 #14 0x00007f6db6e9adf5 in start_thread () from /lib64/libpthread.so.0 #15 0x00007f6db3d9b1ad in clone () from /lib64/libc.so.6
zlog的确是个不错的日志程序,虽然程序不怎么能看懂,也没有时间好好研究一下。
最后,非常感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
引用来自“难易”的评论
第一个问题我也不是很清楚,可能是写16进制的时候vfprintf () 读到了非法的地址
第二个问题,在配置文件中显式的指定 /dev/tty之类的输出吧,不要用stdout
zlog写了已经很久了,有很多地方都有些问题。
谢谢。由于项目对效率的要求较高,所以未考虑对zlog调用进行加锁处理,用户信息都有各自的缓冲区空间……不过也可能是有地方未处理好导致的问题吧
你调用log的时候加锁没,用户信息是放到自己开辟的缓冲区的?
第一个问题我也不是很清楚,可能是写16进制的时候vfprintf () 读到了非法的地址
第二个问题,在配置文件中显式的指定 /dev/tty之类的输出吧,不要用stdout
zlog写了已经很久了,有很多地方都有些问题。