蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


@程序在测试机上跑没问题,现场莫名其妙的退出@

写的一个deamon程序,在测试机器上跑了两天,没有一点问题。
可是放到现场总是跑上几个小时就莫名其妙的退出。并且日志没有任何异常。也没有core dump


程序大概的功能就是作为server端接收client进程A发过来的消息,然后处理消息,将处理完的消息封包,通过socket发送给另一个进程B。程序中处理了 sigpipe,sighup等信号,当B产生sigpipe时打印syslog,不退出。现场进程A,B运行正常。ps查看进程没有内存泄漏。

现场数据量比较大(大概1秒钟一条),消息处理用到较多的stl函数。我在测试机上模拟0.5秒发送一条消息。跑了两天也没有任何异常。

建议贴出部分代码和ps查询结果,否则真不好分析

代码得摘出来,现在没时间,晚上看看。
ps结果:
[code]
bash-2.03$ ps -efl |grep nokia
8 S    probe  2953 16939  0  50 20        ?    138        ? 10:16:34 pts/10   0:00 grep nokia
8 S    probe 27009     1  0  40 20        ?    374        ? 10:08:25 ?        0:00 ./nokia_alarmPrb -d
[/code]

可能封包边界处理不对

回复 4楼 liubinbj 的帖子

你说的封包边界指的是???
我封包的包头用的是两byte16进制的消息总长度,然后每个消息字段前用的是一个byte的每个字段的16进制长度。

我测试机上运行的A,B进程和现场的是一样的,要是封包边界不对的话,测试机上应该也会有问题的吧。

这种情况经常会碰到的.
无非两种情况
1.现场环境和测试环境的差别.
2.程序本身不健壮,测试用数据未能覆盖到在线系统的所有情况.

回复 6楼 unicorns 的帖子

这种问题最不好找了,不知从哪找起

lz做安全的?

回复 6楼 unicorns 的帖子

碰到这种问题,该怎么解决?

现场进程在调试器下运行,设断点exit/_exit.

不是有core dump吗?跟进去啊,看在哪里异常的,还有最好检测一下初始化的那些函数,看有什么遗漏的或者是多处理的

sigpipe,sighup等信号!看看信号处理用的什么函数?signal?信号处理在特定情况下有不确定行为,叫不安全信号,建议用sigaction

是solaris系统么?

回复 12楼 cattiger 的帖子

我用的sigaction,在solaris系统下跑,测试机和现场机器都是solaris

如果是solaris,可以用命令truss来动态查看系统调用和自己的函数调用。

man truss



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com