求救:Linux连接总是报:connection reset by peer问题!!!

hzgchina2208 2004-11-05 09:30:56
各位大哥:小弟我在Linux下写的服务程序,当压力很大(连接客户量多频繁、发送请求频繁)的时候,服务总是会部分连接报connection reset by peer错误,结果我的服务把它关闭!
  查了部分资料,大部分是认为Linux有个tcp_wrap守护服务程序来管理tcp,默认值为一秒只能连一个上来。。。现在想知道的是,即然这个程序能控制连接,有没有办法修改这个参数呢?
  顺便再问一个问题:系统总是会报“断开的管道”错误??
  请各位帮帮忙,急啊!!!(在外网会有这个问题,内网没有出现)
...全文
13798 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzgchina2208 2004-11-06
  • 打赏
  • 举报
回复
listen的第二个参数,我已设成最大值SOMAXCONN,我修正内核该值为256.我的服务器是双CPU,2G内存的,应该足够大,可能是我的压力程序连接太快太多,请求发送频繁!!!
hzgchina2208 2004-11-06
  • 打赏
  • 举报
回复
哈哈。。太好了,谢谢各位大哥,小弟搞定了!!!
connection reset by peer确实如zzw_happy(蒹葭苍苍)所说,tcp有三次握手过程,在其中握手还未到三次时,有一个确认过程没有收到而又超时,就会出现connection reset by peer.

管道错误是信号未屏蔽导致!!!太谢谢!!下面是一信号屏蔽函数,小弟只收集了Linux/Aix9000上的,奉献给大家!!
void InstalSignal()
{
signal(SIGHUP ,SIG_IGN ); /* hangup, generated when terminal disconnects */
signal(SIGINT ,SIG_IGN ); /* interrupt, generated from terminal special char */
signal(SIGQUIT ,SIG_IGN ); /* (*) quit, generated from terminal special char */
signal(SIGILL ,SIG_IGN ); /* (*) illegal instruction (not reset when caught)*/
signal(SIGTRAP ,SIG_IGN ); /* (*) trace trap (not reset when caught) */
signal(SIGABRT ,SIG_IGN ); /* (*) abort process */
#ifdef D_AIX
signal(SIGEMT ,SIG_IGN ); /* EMT intruction */
#endif
signal(SIGFPE ,SIG_IGN ); /* (*) floating point exception */
signal(SIGKILL ,SIG_IGN ); /* kill (cannot be caught or ignored) */
signal(SIGBUS ,SIG_IGN ); /* (*) bus error (specification exception) */
signal(SIGSEGV ,SIG_IGN ); /* (*) segmentation violation */
signal(SIGSYS ,SIG_IGN ); /* (*) bad argument to system call */
signal(SIGPIPE ,SIG_IGN ); /* write on a pipe with no one to read it */
signal(SIGALRM ,SIG_IGN ); /* alarm clock timeout */
//signal(SIGTERM ,stopproc ); /* software termination signal */
signal(SIGURG ,SIG_IGN ); /* (+) urgent contition on I/O channel */
signal(SIGSTOP ,SIG_IGN ); /* (@) stop (cannot be caught or ignored) */
signal(SIGTSTP ,SIG_IGN ); /* (@) interactive stop */
signal(SIGCONT ,SIG_IGN ); /* (!) continue (cannot be caught or ignored) */
signal(SIGCHLD ,SIG_IGN); /* (+) sent to parent on child stop or exit */
signal(SIGTTIN ,SIG_IGN); /* (@) background read attempted from control terminal*/
signal(SIGTTOU ,SIG_IGN); /* (@) background write attempted to control terminal */
signal(SIGIO ,SIG_IGN); /* (+) I/O possible, or completed */
signal(SIGXCPU ,SIG_IGN); /* cpu time limit exceeded (see setrlimit()) */
signal(SIGXFSZ ,SIG_IGN); /* file size limit exceeded (see setrlimit()) */

#ifdef D_AIX
signal(SIGMSG ,SIG_IGN); /* input data is in the ring buffer */
#endif

signal(SIGWINCH,SIG_IGN); /* (+) window size changed */
signal(SIGPWR ,SIG_IGN); /* (+) power-fail restart */
//signal(SIGUSR1 ,stopproc); /* user defined signal 1 */
//signal(SIGUSR2 ,stopproc); /* user defined signal 2 */
signal(SIGPROF ,SIG_IGN); /* profiling time alarm (see setitimer) */

#ifdef D_AIX
signal(SIGDANGER,SIG_IGN); /* system crash imminent; free up some page space */
#endif

signal(SIGVTALRM,SIG_IGN); /* virtual time alarm (see setitimer) */

#ifdef D_AIX
signal(SIGMIGRATE,SIG_IGN); /* migrate process */
signal(SIGPRE ,SIG_IGN); /* programming exception */
signal(SIGVIRT ,SIG_IGN); /* AIX virtual time alarm */
signal(SIGALRM1,SIG_IGN); /* m:n condition variables - RESERVED - DON'T USE */
signal(SIGWAITING,SIG_IGN); /* m:n scheduling - RESERVED - DON'T USE */
signal(SIGCPUFAIL ,SIG_IGN); /* Predictive De-configuration of Processors - */
signal(SIGKAP,SIG_IGN); /* keep alive poll from native keyboard */
signal(SIGRETRACT,SIG_IGN); /* monitor mode should be relinguished */
signal(SIGSOUND ,SIG_IGN); /* sound control has completed */
signal(SIGSAK ,SIG_IGN); /* secure attention key */
#endif
}
cvsuser 2004-11-05
  • 打赏
  • 举报
回复
listen的第二参数你传的几?
铖邑 2004-11-05
  • 打赏
  • 举报
回复
断开的管道 是指向一个已经关闭的socket写数据时,报告的错误。可以将该信号屏蔽signal(SIGPIPE, SIG_IGN);

至于connection reset by peer
在下也感到莫名其妙,于是搬张凳子等待高手ing
jkjium 2004-11-05
  • 打赏
  • 举报
回复
对方没有close就cancel了socket pair,你就会收到一个sig_pipe信号然后strerror会显示“connection reset by peer”的错误。防止程序退出解决方法就是处理SIGPIPE信号
pacman2000 2004-11-05
  • 打赏
  • 举报
回复
因为排队的数量有限,所以压力很大的时候系统会自动把队列外的断开连接。
通过加大listen的backlog可以增加队列数。另外,就是想系统设计上的其他方法来减少accept的等待时间。
zzw_happy 2004-11-05
  • 打赏
  • 举报
回复
tcp的某一方发出了tcp_sync包,
另一方就connection reset了
一般是程序不正常退出导致
诊断是HCIE考试中重要的一板块,本课程围绕这一板块进行讲解,其中范文展示如下:                                    关于“AR29 loopback 0不能访问AR28 loopback0”的诊断告一、故障根因。    经过分析,“AR29 loopback 0不能访问AR28 loopback0”的原因是,LSW6连接AR29和AR28的接口错误划分进不同的vlan,导致AR29和AR28不在一个广播域。 二、故障分析。    步骤2-1:故障现象重现,AR29使用loopback0作为源IP地址去ping AR28的loopback0,命令:   ping -a 10.5.1.29 10.5.1.28  PING 10.5.1.28: 56  data bytes, press CTRL_C to break    Request time out    Request time out    Request time out    Request time out    Request time out   --- 10.5.1.28 ping statistics ---    5 packet(s) transmitted    0 packet(s) received    100.00% packet loss      上面结果表明,确实存在故障,由于AR29和AR28之间运行OSPF协议,所以下一步将在AR29进一步查看路由表以确定是否存在AR28 loopback0接口的ip地址的路由信息。    步骤2-2:在AR29上检查路由表,以确定是否存在AR28 loopback0接口的ip地址的路由信息。查看命令及结果如下:    display ip routing-table Route Flags: R - relay, D - download to fib------------------------------------------------------------------------------Routing Tables: Public         Destinations : 12       Routes : 12        Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface       10.5.1.29/32  Direct  0    0           D   127.0.0.1       LoopBack0      10.5.1.33/32  OSPF    10   1           D   10.5.233.33     GigabitEthernet0/0/1     10.5.128.0/24  Direct  0    0           D   10.5.128.29     GigabitEthernet0/0/0    10.5.128.29/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0   10.5.128.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/0     10.5.233.0/24  Direct  0    0           D   10.5.233.29     GigabitEthernet0/0/1    10.5.233.29/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1   10.5.233.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet0/0/1      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0     上面结果表明,AR29没有去往AR28 loopback0的路由。所以下一步将检查AR29和AR28的OSPF邻居关系。    步骤2-3:在AR29上检查AR29和AR28的OSPF邻居关系。检查命令及结果如下:    display ospf peer brief          OSPF Process 1 with Router ID 10.5.1.29              Peer Statistic Information    ----------------------------------------------------------------------------        Area Id          Interface                        Neighbor id      State        0.0.0.2          GigabitEthernet0/0/1             10.5.1.33        Full            ----------------------------------------------------------------------------        上面结果表明,AR29与AR28不存在OSPF邻居关系。所以初步判断OSPF配置错误,需要进一步检查确认。    步骤2-4:由于AR27与AR28 AR29处于同一OSPF区域中,所以可以通过AR27的测试结果来判断AR28配置是否正确,测试及结果如下:[AR27]display ospf peer brief                 //查看OSPF邻居                  OSPF Process 1 with Router ID 10.5.1.27                  Peer Statistic Information ---------------------------------------------------------------------------- Area Id          Interface                        Neighbor id      State     0.0.0.0          GigabitEthernet0/0/0             10.5.1.28        Full         ----------------------------------------------------------------------------[AR27]dis ip routing-table | in 10.5.1.28     //查看OSPF路由Route Flags: R - relay, D - download to fib------------------------------------------------------------------------------Routing Tables: Public         Destinations : 19       Routes : 19        Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface 10.5.1.28/32  OSPF    10   1           D   10.5.128.28     GigabitEthernet0/0/0 [AR27]    上面结果表明,AR27与AR28之间正常建立OSPF邻居,并且AR27能学习到AR28 loopback0的路由,说明AR28的OSPF配置正确,下一步将对比AR27与AR29的OSPF配置,来进一步判断AR29的OSPF配置是否正确。    步骤2-5:在AR27和AR29上使用命令display ospf brief检查对比AR29的OSPF配置是否正确,结果如下:[AR27]dis ospf brief        //查看AR27 OSPF协议简要信息         OSPF Process 1 with Router ID 10.5.1.27                 OSPF Protocol Information  RouterID: 10.5.1.27        Border Router:  ......(此处省略部分内容) Area: 0.0.0.0          (MPLS TE not enabled) Authtype: MD5   Area flag: Normal SPF scheduled Count: 15     ExChange/Loading Neighbors: 0 Router ID conflict state: Normal Area interface up count: 3.......

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧