多线程使用zlog偶尔会发生core dump

发布于 2021-11-28 20:07:19 字数 3086 浏览 975 评论 4

@难易 你好,想跟你请教个问题:

项目中使用到了你的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用户手册》也有提到这个问题,但是由于目前项目测试原因,守护进程并未关闭系统默认的输入输出fd,也并未使用到《zlog用户手册》提到的情况,不知是否还有其他问题会引起该问题呢?

zlog的确是个不错的日志程序,虽然程序不怎么能看懂,也没有时间好好研究一下。

最后,非常感谢!


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

长安忆 2021-12-02 04:29:35

引用来自“难易”的评论

第一个问题我也不是很清楚,可能是写16进制的时候vfprintf () 读到了非法的地址

第二个问题,在配置文件中显式的指定 /dev/tty之类的输出吧,不要用stdout

zlog写了已经很久了,有很多地方都有些问题。

自此以后,行同陌路 2021-12-02 04:27:18

谢谢。由于项目对效率的要求较高,所以未考虑对zlog调用进行加锁处理,用户信息都有各自的缓冲区空间……不过也可能是有地方未处理好导致的问题吧

谁的新欢旧爱 2021-12-01 13:00:48

你调用log的时候加锁没,用户信息是放到自己开辟的缓冲区的?

冷默言语 2021-11-29 04:12:40

第一个问题我也不是很清楚,可能是写16进制的时候vfprintf () 读到了非法的地址

第二个问题,在配置文件中显式的指定 /dev/tty之类的输出吧,不要用stdout

zlog写了已经很久了,有很多地方都有些问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文