Chinaunix

标题: @程序在测试机上跑没问题,现场莫名其妙的退出@ [打印本页]

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


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

现场数据量比较大(大概1秒钟一条),消息处理用到较多的stl函数。我在测试机上模拟0.5秒发送一条消息。跑了两天也没有任何异常。
作者: czshjh    时间: 2006-06-09 10:07
建议贴出部分代码和ps查询结果,否则真不好分析
作者: letian0711    时间: 2006-06-09 10:34
代码得摘出来,现在没时间,晚上看看。
ps结果:

  1. bash-2.03$ ps -efl |grep nokia
  2. 8 S    probe  2953 16939  0  50 20        ?    138        ? 10:16:34 pts/10   0:00 grep nokia
  3. 8 S    probe 27009     1  0  40 20        ?    374        ? 10:08:25 ?        0:00 ./nokia_alarmPrb -d
复制代码

作者: liubinbj    时间: 2006-06-09 10:42
可能封包边界处理不对
作者: letian0711    时间: 2006-06-09 10:48
标题: 回复 4楼 liubinbj 的帖子
你说的封包边界指的是???
我封包的包头用的是两byte16进制的消息总长度,然后每个消息字段前用的是一个byte的每个字段的16进制长度。

我测试机上运行的A,B进程和现场的是一样的,要是封包边界不对的话,测试机上应该也会有问题的吧。
作者: unicorns    时间: 2006-06-09 14:12
这种情况经常会碰到的.
无非两种情况
1.现场环境和测试环境的差别.
2.程序本身不健壮,测试用数据未能覆盖到在线系统的所有情况.
作者: letian0711    时间: 2006-06-09 14:20
标题: 回复 6楼 unicorns 的帖子
这种问题最不好找了,不知从哪找起
作者: cmh_2003    时间: 2006-06-09 14:43
lz做安全的?
作者: letian0711    时间: 2006-06-10 12:27
标题: 回复 6楼 unicorns 的帖子
碰到这种问题,该怎么解决?
作者: Alligator27    时间: 2006-06-10 20:56
现场进程在调试器下运行,设断点exit/_exit.
作者: chealim    时间: 2006-06-11 09:53
不是有core dump吗?跟进去啊,看在哪里异常的,还有最好检测一下初始化的那些函数,看有什么遗漏的或者是多处理的
作者: cattiger    时间: 2006-06-12 19:08
sigpipe,sighup等信号!看看信号处理用的什么函数?signal?信号处理在特定情况下有不确定行为,叫不安全信号,建议用sigaction
作者: pcanywhere    时间: 2006-06-13 12:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: letian0711    时间: 2006-06-16 18:30
标题: 回复 12楼 cattiger 的帖子
我用的sigaction,在solaris系统下跑,测试机和现场机器都是solaris
作者: syncpk99    时间: 2006-06-16 22:52
标题: 如果是solaris,可以用命令truss来动态查看系统调用和自己的函数调用。
man truss




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2