免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3414 | 回复: 9

[C] 【求助】recv问题 [复制链接]

论坛徽章:
0
发表于 2010-01-26 09:35 |显示全部楼层
20可用积分
服务端采用epoll水平触发的方式,所有socket设置非阻塞,但是我的程序会卡在recv函数里面,出不来,而且ps命令出不全了,只会显示到我程序进程的前一个,之后也就不会出现“#”(root用户)了,公司代码不能公开,有哪位大侠知道是怎么回事?或者给我一个思路呢,谢谢了,困扰很久了都没解决,自己觉得是资源冲突了,但是在哪里定位不出来。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-01-26 10:29 |显示全部楼层
1. 是不是死循环了?你确定是卡在recv系统调用里边了?
2. ps 怎么会显示不全呢  ps -ef   不行?
3. 用top 看看,占用的CPU,是不是满了,
4. netstat -anp --inet 看看socket是什么状态
5. 这点代码,你公开了谁会看到你们公司的业务呢

论坛徽章:
0
发表于 2010-02-04 11:33 |显示全部楼层
呵呵,代码很大的,倒不是怕什么公司业务,只是有规定而已,呵呵,只是查到卡在recv里面了
我用strace查看ps如下:1716就是我运行的进程
write(1, "  929 root         0 Z    [sma49"..., 37) = 37                                                
stat64("/proc/1119", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0                                         
open("/proc/1119/stat", O_RDONLY|O_LARGEFILE) = 4                                                        
read(4, "1119 (ash) S 850 1119 1119 34817"..., 1023) = 195                                               
close(4)                                = 0                                                              
open("/proc/1119/cmdline", O_RDONLY|O_LARGEFILE) = 4                                                     
read(4, "-ash\0", 105)                  = 5                                                               
read(4, "", 100)                        = 0                                                               
close(4)                                = 0                                                               
write(1, " 1119 root      2888 S    -ash \n", 32) = 32                                                   
stat64("/proc/1651", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0                                                                    
open("/proc/1651/stat", O_RDONLY|O_LARGEFILE) = 4                                                                                   
read(4, "1651 (snmpagent) S 1 1650 1119 3"..., 1023) = 190                                                                          
close(4)                                = 0                                                                                         
open("/proc/1651/cmdline", O_RDONLY|O_LARGEFILE) = 4                                                                                
read(4, "snmpagent\0", 105)             = 10                                                                                       
read(4, "", 95)                         = 0                                                                                         
close(4)                                = 0                                                                                         
write(1, " 1651 root     18504 S    snmpag"..., 37) = 37                                                                           
stat64("/proc/1716", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0                                                                    
open("/proc/1716/stat", O_RDONLY|O_LARGEFILE) = 4                                                                                   
read(4, "1716 (sma) S 1 1713 1621 0 -1 41"..., 1023) = 186                                                                          
close(4)                                = 0                                                                                         
open("/proc/1716/cmdline", O_RDONLY|O_LARGEFILE) = 4                                                                                
read(4,

论坛徽章:
0
发表于 2010-02-04 11:40 |显示全部楼层
#
# ps
  PID USER       VSZ STAT COMMAND
    1 root      2884 S    init      
    2 root         0 SWN  [ksoftirqd/0]
    3 root         0 SW   [watchdog/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
    6 root         0 SW<  [kthread]
   61 root         0 SW<  [kblockd/0]
   62 root         0 SW<  [ata/0]
   63 root         0 SW<  [ata_aux]
   77 root         0 SW   [pdflush]
   78 root         0 SW   [pdflush]
   79 root         0 SW<  [kswapd0]
   80 root         0 SW<  [aio/0]
   81 root         0 SW<  [xfslogd/0]
   82 root         0 SW<  [xfsdatad/0]
  703 root         0 SW   [mtdblockd]
  770 root         0 SW<  [scsi_eh_0]
  780 root         0 SW<  [scsi_eh_1]
  781 root         0 SW<  [scsi_eh_2]
  787 root         0 SW<  [send_thread]
  789 root         0 SW<  [pd_hot_plug_thr]
  790 root         0 SW<  [pd_recv_thread]
  791 root         0 SW<  [pd_msg_thread]
  792 root         0 SW<  [pd_hot_plug_msg]
  793 root         0 SW<  [jbod_msg_thread]
  794 root         0 SW<  [error_handler]
  795 root         0 SW<  [dg_msg_thread]
  796 root         0 SW<  [dg_sub_msg_thre]
  797 root         0 SW<  [error_handler]
  798 root         0 SW<  [lv_event_thread]
  799 root         0 SW<  [vd_msg_thread]
  800 root         0 SWN  [cbs_read_cmd_pr]
  801 root         0 SWN  [cbs_write_cmd_p]
  802 root         0 SWN  [cbs_write_wt_cm]
  803 root         0 SWN  [cbs_write_back_]
  804 root         0 SWN  [cbs_mirror_mgmt]
  805 root         0 SWN  [cbs_rx_data_thr]
  806 root         0 SWN  [cbs_free_cache_]
  807 root         0 SWN  [cbs_mirror_done]
  808 root         0 SWN  [cbs_mirror_msg_]
  809 root         0 SW<  [sps_access_ctrl]
  813 root         0 SW<  [sps_task_set_mg]
  814 root         0 SW<  [sps_cmd_thread_]
  815 root         0 SW<  [sps_mgmt_cmd_th]
  848 root      3140 S    inetd
  850 root      2888 R    telnetd
  851 root     67936 S    /home/root/scs_usr
  854 root     26428 S <  /usr/local/AMS/lcd/lcdd
  861 root      1520 S    /usr/local/AMS/cli/telnet_server
  862 root     59072 S    ./mongoose -ports 80 -index_files start.htm
  864 root      1836 S    /usr/local/AMS/sma/M300Syslogd
  870 root      2340 S    /usr/local/AMS/sma/M300Klogd
  883 root         0 SW<  [dg0ld0_raid5]
  884 root         0 SW<  [dg0ld0_scsi_cmd]
  910 root      1784 S    /usr/local/AMS/cli/cmdmgt -l
  920 root      2888 S    -ash
  929 root         0 Z    [sma49zsq]
1119 root      2888 S    -ash
1651 root     18504 R    snmpagent


top




只要ps就出不来了,也没有#符合了,这时输入什么都没用了,比如top,reboot啥的

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2010-02-04 15:06 |显示全部楼层
懒得鸟你

论坛徽章:
0
发表于 2010-02-04 16:40 |显示全部楼层
看/proc/pid/wchan文件看到底堵在哪了

也许你把ps要读取的文件加了强制锁呢

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
发表于 2010-02-04 16:52 |显示全部楼层
open("/proc/1716/cmdline", O_RDONLY|O_LARGEFILE) = 4                                                                                
read(4,
很正常啊

论坛徽章:
0
发表于 2010-02-04 18:43 |显示全部楼层
回复 5# vbs100
那你还逼逼啥?

论坛徽章:
0
发表于 2010-02-04 18:44 |显示全部楼层
回复 7# xinglp
不正常啊,正常就应该read读完才对

论坛徽章:
0
发表于 2010-02-04 22:09 |显示全部楼层
本帖最后由 luoleicn 于 2010-02-04 22:20 编辑

没仔细看,但是我以前用udp时候确实遇到国卡在recv上的时候,后来我用select包装了一下这个recv让它超时返回了。好吧我承认我猥琐了

ps:七楼太邪恶了,我看到你头像时还以为有个虫子飞我显示器上了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP