项目开了个P2P服务器,但是运行一段时间就会出现丢包问题,具体表现为:
1、udp丢包严重(一分钟收发分别1.5W)

2、ssh(用于运维指令)连接不上该服务器(超时)

3、服务器运行好像没什么异常,udp假连接数比tcp连接数少(正常应该相近)


首先开始怀疑是不是客户端有bug,查log发现某段时间有个别客户端发大量心跳包,开始怀疑这个原因导致服务异常。在多次关服开服后没出现这个问题,但是服务器运行一段时间依旧出现上述异常,排除这个原因。


既然不是客户端导致的。。

就开始在自身找原因,接着怀疑是不是最大连接数、最大文件打开数,查了一下服务器设置:

ulimit -n  //可以打开最大文件描述符的数量

65536

ulimit -a  //显示当前所有的 limit 信息

time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) 8192
coredump(blocks) unlimited
memory(kbytes) unlimited
locked memory(kbytes) 64
process 516037
nofiles 65536
vmemory(kbytes) unlimited
locks unlimited

cat /proc/sys/fs/nr_open  //单进程最大文件限制

1048576

cat /proc/sys/fs/file-max  //系统最大文件限制

6605234

再看下服务器现在相关信息:

lsof -n  //查看服务器文件打开数信息

ps -aef  //进程信息

发现无论是文件描述符打开数还是文件打开数都没超标---陷入僵局。


觉得应该是系统某个设置不当导致的,但是又无从查起,查 /car/log/messages 里面的信息应该能查到点端倪,可是没权限。(dmesg  命令好像可以查看)

后来咨询其他小组,发现他们也遇到过一样的问题,问题来自于跟踪连接表的限制----nf_conntrack/ip_conntrack。

理解nf_conntrack和调整nf_conntrack_max :nf_conntrack 工作在 3 层,支持 IPv4 和 IPv6,而 ip_conntrack 只支持 IPv4。

目前,大多的 ip_conntrack_* 已被 nf_conntrack_* 取代,很多 ip_conntrack_* 仅仅是个 alias,原先的 ip_conntrack 的 /proc/sys/net/ipv4/netfilter/ 依然存在,但是新的 nf_conntrack 在 /proc/sys/net/netfilter/ 中,这个应该是做个向下的兼容。

nf_conntrack/ip_conntrack 跟 nat 有关,用来跟踪连接条目,它会使用一个哈希表来记录 established 的记录。nf_conntrack 在 2.6.15 被引入,而 ip_conntrack 在 2.6.22被移除,如果该哈希表满了,就会出现问题来。

查看系统默认跟踪连接表限制:

cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max  //最大
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established   //保存时间

cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count  //当前

查看了以后,发现运行一段时间后 跟踪连接表的确是满了,导致文章开始所述的情况出现,而 ip_conntrack_max 有个建议值:

CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G内存可以设置1048576

临时修改该值:

echo 1048576> /proc/sys/net/ipv4/netfilter/ip_conntrack_max

p2p服务器重启后运行恢复正常。


参考引用:

http://itoedr.blog.163.com/blog/static/120284297201451013130868/

http://www.cnblogs.com/276815076/p/5736272.html

http://www.sdnlab.com/17530.html

linux 服务器丢包故障排查的更多相关文章

  1. Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...

  2. [转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...

  3. zabbix监控Linux服务器丢包率

    http://www.ttlsa.com/zabbix/zabbix-simple-checks/  这个文章看了,还没有实践 1.先创建监控项,键值如下 icmppingloss[<121.1 ...

  4. 修改网卡缓存,解决Linux 网卡丢包严重问题

    Linux 网卡丢包严重 生产中有一台linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备前想能不有通过软件方法解决,通过网上一 ...

  5. Linux系统运维故障排查

    一.思路 1.处理问题要求 2.一般思路 二.具体问题 1.网络问题 (1)网络不通 (2)网络很慢 2.硬件问题 3.操作系统问题 (1)系统无法正常启动 (2)系统运行慢或死机 4.服务或程序问题 ...

  6. winxp系统连接服务器丢包解决方法

    winxp系统连接服务器丢包解决方法 MFC编写一个打开网页的程序,发生异常没有获取到数据. 分析步骤: 1. 用getLastError()获取到的信息,(2)- 系统找不到指定的文件. 2. 用浏 ...

  7. 七种可能 | Linux丢包故障的定位与解决

    出处[云英公众号]:https://mp.weixin.qq.com/s?__biz=MzI1NzM3NTYxMw==&mid=2247483685&idx=1&sn=95c8 ...

  8. [转] Linux运维常见故障排查和处理的技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

  9. Linux运维常见故障排查和处理的33个技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

随机推荐

  1. Codecraft-18 and Codeforces Round #458:D,Bash and a Tough Math Puzzle

    题目传送门 题目大意:Bash喜欢对数列进行操作.第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到.第二种操作是将ai修改为x.总共Q个询问,N个数. Soluti ...

  2. 水灾 1000MS 64MB (广搜)

    水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...

  3. 文件同步 单向rsync 双向unison 监控inotifywait 免密登录

    1.负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步 rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能. 实现同步的两种方法 一:ssh方法 rsync - ...

  4. 阿里云中linux 下svn服务器安装

    摘要: 安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输 ...

  5. 第五模块:WEB开发基础 第3章·BootStrap&JQuery开发

    01-JQuery介绍 02-jQuery文件引入和加载的区别 03-jQuery的基础选择器 04-jQuery的层级选择器 05-jQuery的基本过滤选择器 06-jQuery的属性选择器 07 ...

  6. 那些年我们不爱学的mysql单词

    MySQL 一种关系型数据库 database 数据库,简称DB databases 数据库的复数,代表多个数据库 net 网络/服务 start 启动 stop 停止 root MySQL数据库中的 ...

  7. Python列表的深拷贝和浅拷贝

    1. Python列表的拷贝 对于python里面如果想要进行列表的拷贝和复制,具体的操作语句如下: 1) 深拷贝: M=[A,b,a,c] N=M[:] 2) 浅拷贝: N=M 有人说可以直接将M赋 ...

  8. Qt Creator 下启动vim模式后,运行快捷键Ctrl+R失效解决方案

    首先开启vim后,Ctrl+R无法用 解决: 工具 -> 选项->FakeVim 转到Ex Command Mapping 搜索Run 底栏Regular expression 输入run ...

  9. 利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 j ...

  10. python3中使用python2中cmp函数出现错误

    在python2中我们经常会使用cmp函数来比较一些东西,但是在python3中,你再来使用这个函数的时候,发现就报错了,提示找不到这个函数,这是为啥呢? 答:新版的python已经舍弃这种用法 而在 ...