Sysctl 配置生效问题

前几天拿到一台新的物理机用jmeter做http接口压测,结果发现错误率很高,一段时间后,抓包发现请求根本没有发出去。

首先用:

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'

查询一下 time wait状态的TCP连接数,发现有两万多个。可能是所有连接已经被占满,没有新连接可以用了。

 

那怎么处理TIMEWAIT过多的问题呢?

上网搜了一下,是编辑linux系统内核参数:sysctl。

首先打开文件:vim /etc/sysctl.conf

然后增加如下配置:

net.ipv4.tcp_max_tw_buckets = 2000  #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。

net.ipv4.tcp_tw_recycle = 1  #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.ip_local_port_range = 1024 65000    #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
### 解决 `sysctl -p` 命令不生效的方法 当遇到 `sysctl -p` 命令不生效的情况时,可能的原因有多种。以下是几种常见的原因及其对应的解决方案。 #### 1. 配置文件路径错误 默认情况下,`/etc/sysctl.conf` 是主要的配置文件位置。然而,在某些发行版中可能会使用 `/etc/sysctl.d/*.conf` 文件夹中的多个配置文件来替代单一的全局配置文件[^3]。因此,如果修改的是其他地方而非上述指定的位置,则更改不会被加载。 #### 2. 权限不足 运行 `sysctl -p` 或者任何试图改变内核参数的操作都需要超级用户权限。如果没有足够的权限,这些改动将无法成功应用到当前会话或持久化保存下来。可以通过前缀 sudo 执行该指令以获得必要的访问级别: ```bash sudo sysctl -p ``` #### 3. 参数拼写错误 检查输入的内容是否有误,特别是对于敏感大小写的键名部分。一个小写字母与大写字母之间的差异都可能导致设置失败而不给出明显的提示信息。 #### 4. 内核版本兼容性问题 不同的 Linux 发行版以及它们各自的更新迭代之间可能存在细微差别,尤其是在涉及到低级别的系统调用方面。确认所使用的命令语法和功能特性适用于本地安装的具体版本是非常重要的。例如 CentOS7.1 和 Ubuntu16.04 对应的不同行为。 #### 5. 加载顺序依赖关系 有时新的设定项依赖于先前已经存在的其它变量值;而后者又可能是通过脚本或其他方式动态计算得出的结果。此时建议尝试完全重启计算机让所有的初始化过程按照预期完成后再测试效果如何。 为了使新加入的自定义规则立即起作用并长期保持下去,可以考虑创建一个新的 `.conf` 文件放置在 `/etc/sysctl.d/` 目录下,并确保其名称带有合适的优先级编号以便正确解析执行次序。最后记得再次调用 `sysctl --system` 来强制刷新整个体系结构内的所有相关联属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值