vip_goup pro_ solv_idea

1. net.ipv4.tcp_keepalive_time = 7200   //减小该值,更快的发现丢失的连接

2.     if( pthread_detach(pthread_self()) != 0 )

3. net.core.somaxconn = 1024  // 改32768 ( 好像与 too many open files 无关  )

4. strace -p, pstack, pstree

5. lsof | grep "can't identify protocol"

===========================================================================
epoll问题

单纯靠epoll来管理描述符不泄露几乎是不可能的。
完全解决方案很简单,就是对每个fd设置超时时间,如果超过timeout的时间,这个fd没有活跃过,就close掉。
ll  /proc/24401/fd >/tmp/xhs.txt
net.core.somaxconn= 4000
# sysctl -p
sysctl -a | grep 'net.core.netdev_max_backlog'
net.core.netdev_max_backlog,该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

cat /proc/sys/net/core/somaxconn
cat /etc/security/limits.conf ,增加:
* soft nofile 32768
* hard nofile 65536

工具和正常的一起测。 看gw响应。。

4. 直播的接口, php设定的超时时间。缩短。

===================

写数据时,直接调用send()发送;只有当send()返回EAGIAN时,才将socket加入EPOLL,等待可写事件后,再发送数据。全部数据发送完毕,再移出EPOLL

net.ipv4.tcp_fin_timeout = 10


file-nr 可以查看系统中当前打开的文件句柄的数量. 他里面包括3个数字: 第一个表示已经分配了的文件描述符数量, 第二个表示空闲的文件句柄数量, 第三个表示能够打开文件句柄的最大值(跟file-max一致). 内核会动态的分配文件句柄, 但是不会再次释放他们(这个可能不适应最新的内核了, 在我的file-nr中看到第二列一直为0, 第一列有增有减)

你可能感兴趣的:(epoll)