日志巡检发现,公司web服务器一直报错,信息如下:
Jul 5 15:40:37 mail kernel: printk: 272 messages suppressed.
Jul 5 15:40:37 mail kernel: TCP: time wait bucket table overflow
Jul 5 15:40:37 mail kernel: TCP: time wait bucket table overflow
Jul 5 15:40:43 mail kernel: printk: 92 messages suppressed.
Jul 5 15:40:43 mail kernel: TCP: time wait bucket table overflow
(TCP:时间等待桶表)
根据报错提示,需要更改net.ipv4.tcp_max_tw_buckets这个内核参数。这个参数是系统同时保持timewait套接字的最大数量。如果超过这个数字,time-wait套接字将立刻被清除并打印警告信息。这个限制仅仅是为了防止简单的
DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,如果网络实际需要大于缺省值,更应该增加这个值(如果增加了内存之后)。
解决方法:增大 tcp_max_tw_buckets的值,并不是这个值越小越好,我看了我系统中TIME_WAIT 大部是由php-fpm产生的,是属于正常的现象
系统在同时所处理的最大timewait sockets 数目。如果超过此数的话﹐time-wait socket
会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS
攻击﹐千万不要人为的降低这个限制﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。
netstat -an | grep 9000 | awk '{print $6}' | sort | uniq -c | sort -rn
netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn
排查步骤:
1. 查看服务器网络连接情况;
[root@mail ~]# netstat -pant |awk '/^tcp/ {++state[$6]} END {for(key in state) printf("%-10s\t%d\n",key,state[key]) }'
TIME_WAIT 4944
CLOSE_WAIT 1
FIN_WAIT1 93
FIN_WAIT2 66
ESTABLISHED 292
SYN_RECV 29
CLOSING 32
LAST_ACK 9
LISTEN 14
[root@mail ~]#
2.查看内核参数
vi /etc/sysctl.conf
将net.ipv4.tcp_max_tw_buckets = 5000
改为:net.ipv4.tcp_max_tw_buckets = 10000
3.使更改的内核参数生效
sysctl -p
4. 再次查看服务器网络连接情况;
[root@mail ~]# netstat -pant |awk '/^tcp/ {++state[$6]} END {for(key in state) printf("%-10s\t%d\n",key,state[key]) }'
TIME_WAIT 6644
CLOSE_WAIT 1
FIN_WAIT1 93
FIN_WAIT2 66
ESTABLISHED 292
SYN_RECV 29
CLOSING 32
LAST_ACK 9
LISTEN 14
5.
#再看/var/log/messages和dmesg的信息,已经不再报错了,看来net.ipv4.tcp_max_tw_buckets=10000暂时是够用了
6.原因
服务器的TCP连接数,超出了内核定义最大数。
分享到:
相关推荐
Bitbucket:使用Bitbucket进行代码提交与合并.docx
Bitbucket:Bitbucket云与服务器版对比.docx
博客模板:Vue Family Bucket,基于组件的开发,完全原生手写组件,目前拦截接口请求模拟响应数据,组件的多种通信方式,404页面···temSite
http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。
Bitbucket:Bitbucket代码搜索与过滤技巧.docx
Bitbucket:Bitbucket与Jira集成使用教程.docx
桶-通用TCP接受器池版权所有(c)2013BenoîtChesneau。 版本: 2.1 桶是通用的TCP接受器池,在Erlang中具有低延迟。...用法创建一个简单的TCP回显服务器。 创建一个简单的回声处理程序 -module(echo_handler).-ex
Bitbucket:Bitbucket服务与Webhooks应用教程.docx
Bitbucket:Bitbucket分支策略详解.docx
Bitbucket:Bitbucket入门与基础操作.docx
**源码管理与BitBucket与SourceTree** 在软件开发中,版本控制是不可或缺的一部分,它帮助开发者追踪代码的变更,协同工作,恢复错误修改。BitBucket是一款由Atlassian公司提供的免费版本控制系统,支持Git和...
Bitbucket:Bitbucket问题追踪与解决方案.docx
Bitbucket:Bitbucket自动化构建与持续集成.docx
在IT行业中,"BUCKET"这个词常常被用来指代一种特定的数据存储概念,尤其是在云存储服务中。在云服务提供商如Amazon S3(Simple Storage Service)中,BUCKET是一种容器,用于存储对象(如文件、图片、视频或任何...
"bitbucketx: 为 bitbucket 启用的 liquidIO 平台" 暗示我们正在讨论一个与 Bitbucket 集成的特定项目或工具,称为 "bitbucketx",它利用了名为 "liquidIO" 的技术。这个工具可能旨在优化 Bitbucket 的性能或增加...
bitbucket-android-gradle-bootstrapper 从 Bitbucket 存储库中的每个 build.gradle 文件下载 Android 元数据。 先决条件 您需要一个特殊的配置文件来为该工具提供有关您的存储库的信息。 [ { " name " : " ...
将BitBucket存储库迁移到Azure DevOps 这会将BitBucket存储库迁移到Azure DevOps。 它将从bitbucket克隆存储库,修改远程源,然后将其推送到Azure DevOps,从而保留所有提交历史记录和分支。 它不会迁移Git LFS。...
对Bitbucket服务器命令行的违规注释 向Bitbucket Server报告静态代码分析。 它使用 。 可以在找到可运行的对象。 使用以下命令运行它: npx violation-comments-to-bitbucket-server-command-line \ -pat ...
Jenkins-Bitbucket 使 Bitbucket 拉取请求与 Jenkins 的相关作业状态保持同步。这个怎么运作该应用程序侦听来自 Jenkins 和 Bitbucket 的网络钩子。 当 Jenkins 作业将其更新状态发送到应用程序时。 当发出拉取请求...