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结果:
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
复制代码
作者:
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