1. Open File Descriptors

Linux在系统调用,大量的系统调用都依赖于文件描述符,而文件描述符可分配给进程的最大大小由资源限制来定义。

因此,如果文件描述符大小不够,或有不正常网络连接(Socket也算)、文件IO没有关闭并释放出文件描述符。也可以说是文件句柄(File Operator),会导致出现Too many open files的错误。

该错误很常见,因此OP几乎都有做优化。

使用如下命令可以查看系统相关的配置:

ulimit -u 查看open files设置

ulimit -a 查看所有配置

ulimit -u 65535 临时修改open files为65535

ulimit -n 65536 用户可以同时打开的最大文件数(max open files)

lsof -p pid ID 查看某进程当前打开的文件资源

针对所有用户及session有效的长期修改方法为:

$ sudo vim /etc/security/limits.conf

# allow all users to open 100000 files

# alternatively, replace * with an explicit username

* soft nofile 100000 #限制单个进程最大文件句柄数

* hard nofile 100000

同时需要修改/etc/sysctl.conf,设置整个系统最大文件句柄数,运行sysctl -p生效

# /etc/sysctl.conf

# Increase system file descriptor limit

fs.file-max = 100000

2TCP time wait间隔指定的时间长度,一个socket在等待FIN数据包从发送者发送时强行关闭。如果TCP没有进入CLOSED状态,主动关闭在发送最后一个ack后,就会进入TIME_WAIT。

这在Cache软件里最为常见,但其它Server也存在。

net.ipv4.tcp_fin_timeout = 30  保持FIN-WAIT-2状态时间。

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.tcp_syncookies = 1

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

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

net.ipv4.ip_local_port_range = 1024    65000

# 表示用于向外连接的端口范围。

# 缺省情况下很小:32768到61000,改为18000到65535。

net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认1024,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000

# 表示系统同时保持TIME_WAIT套接字最大数量.

# 如果超出TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。

理解服务器tcp状态

10

SYN_SEND     请求服务端建立连接。

SYN_RECEIVED 服务器接收到了来自客户端的SYN。

ESTABLISHED  客户端接收到了服务端的SYN,会话建立完成。

LISTEN     服务器端开始接收连接。

FIN_WAIT_1   指示活动结束。

TIMED_WAIT   客户端在活动结束后将进入此状态。

CLOSE_WAIT   表示被动关闭。服务器只是从客户端收到第一个翼片。

FIN_WAIT_2   客户端从服务器收到其第一个 FIN 的确认。

LAST_ACK     发送自己的FIN后进入此状态。

CLOSED       服务器从客户端收到 ACK,连接已关闭。

附赵岩和我whoisd上面总结的

可以通过系统的sysctl.conf配置文件进行优化

1、减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。

net.ipv4.tcp_fin_timeout = 2

如果由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

对端可以出错并永远不关闭连接,甚至意外当机,缺省值是60秒。

内核的通常值是180秒,可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。

2、以下两参数可解决生产场景中大量连接的Web(cache)服务器中TIME_WAIT过多问题。

net.ipv4.tcp_tw_reuse = 1

表示开启重用。允许将TIME-WAIT sockets重新用于新的 TCP 连接,默认为 0 表示关闭。

3、打开TIME-WAIT重用及回收功能。

net.ipv4.tcp_tw_recycle = 1

表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭。

4、当keepalive起用的时候,TCP发送keepalive消息的频度,缺省是2小时,改为20分钟。

net.ipv4.tcp_keepalive_time = 600

5、允许系统打开的端口范围

net.ipv4.ip_local_port_range = 4000    65000

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为4000到65000。

6、提高系统支持的最大SYN半连接数(默认1024)

net.ipv4.tcp_max_syn_backlog = 16384

表示SYN队列的长度,默认为1024,加大队列长度为16384,可以容纳最多等待连接的网络连接数。

7、系统同时保持TIME_WAIT的最大数量

net.ipv4.tcp_max_tw_buckets = 360000

表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为 5000。

对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。

8、路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认是300。

net.ipv4.route.gc_timeout = 100

9、在内核放弃建立连接之前发送SYN包的数量。

net.ipv4.tcp_syn_retries = 1

10、减少系统SYN连接重试次数(默认是5)

net.ipv4.tcp_synack_retries = 1

为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。

也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。

11、设置系统对最大跟踪的TCP连接数的限制

net.ipv4.ip_conntrack_max = 25000000

一个完整的sysctl.conf文件

# /etc/sysctl.conf

# Increase system file descriptor limit

fs.file-max = 100000

# Discourage Linux from swapping idle processes to disk (default = 60)

vm.swappiness = 10

# Increase ephermeral IP ports

net.ipv4.ip_local_port_range = 10000 65000

# Increase Linux autotuning TCP buffer limits

# Set max to 16MB for 1GE and 32M (33554432) or 54M (56623104) for 10GE

# Don't set tcp_mem itself! Let the kernel scale it based on RAM.

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.rmem_default = 16777216

net.core.wmem_default = 16777216

net.core.optmem_max = 40960

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

# Make room for more TIME_WAIT sockets due to more clients,

# and allow them to be reused if we run out of sockets

# Also increase the max packet backlog

net.core.netdev_max_backlog = 50000

net.ipv4.tcp_max_syn_backlog = 30000

net.ipv4.tcp_max_tw_buckets = 2000000

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 10

# Disable TCP slow start on idle connections

net.ipv4.tcp_slow_start_after_idle = 0

# If your servers talk UDP, also up these limits

net.ipv4.udp_rmem_min = 8192

net.ipv4.udp_wmem_min = 8192

# Disable source routing and redirects

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.accept_source_route = 0

# Log packets with impossible addresses for security

net.ipv4.conf.all.log_martians = 1

linux的php优化,linux优化转载相关推荐

  1. 如何优化linux系统

    如何优化linux系统? 1.配置更新yum源 2.关闭selinux和iptables 3.使用普通用户工作,并通过sudo按命令分类授权管理 4.最小化安装系统,只装需要的软件包 5.chattr ...

  2. linux内核参数注释与优化

    目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少 ...

  3. 优化Linux系统中的服务

    优化Linux系统中的服务 实验要求 设置Linux系统每次开机后自动进入字符模式界面. 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务: atd.bluetooth.c ...

  4. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  5. Linux 2.6.31内核优化指南

    Linux 2.6.31内核优化指南 作者:Ken Wu Email: ken.wug@gmail.com 转载本文档请注明原文链接 http://kenwublog.com/docs/linux-k ...

  6. Linux转发性能评估与优化之——转发瓶颈分析与解决方案

    线速问题 很多人对这个线速概念存在误解.认为所谓线速能力就是路由器/交换机就像一根网线一样.而这,是不可能的.应该考虑到的一个概念就是延迟.数据包进入路由器或者交换机,存在一个核心延迟操作,这就是选路 ...

  7. 嵌入式linux内存使用和性能优化

    这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...

  8. linux启动时间极限优化,Linux启动时间的极限优化

    在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...

  9. 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录 一.禁止 / 开启内核抢占 与 方法保护临界区 二.编译器优化屏障 三.preempt_disable 禁止内核抢占 源码 四.preempt_enable 开启内核抢占 源码 一.禁止 / ...

  10. 【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )

    文章目录 一.内存屏障 二.编译器屏障 三.处理器内存屏障 一.内存屏障 内存屏障 , 又称为 " 屏障指令 " , 用于保证 " 编译器 " 或 " ...

最新文章

  1. From 《visual C++ 6.0开发工具与调试》
  2. 【408预推免复习】计算机组成原理之存储器
  3. shell调用python函数_shell调用python函数
  4. 浅谈PostgreSQL的索引
  5. mysql+rownumber的用法_mysql中如何实现row_number
  6. android列表【android开发记录片】android下实现圆角列表布局控件
  7. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...
  8. TreeView的checked事件
  9. 解决Matlab画图直接保存.eps格式而导致图不全的问题
  10. 网络协议之UDP数据包
  11. windows11(win10大部分通用)系统C盘清理 | 深度优化
  12. php curl发邮件,使用PHP cURL通过Mailgun API发送带附件的电子邮件
  13. 使用jquery实现图形点击文字按顺序验证码案例及代码完整版
  14. VSCode C/C++ 使用指北
  15. memcpy和memset使用时需要区分的注意点
  16. 手机广告 开源SNS
  17. 113.输入10个国家的名字,按由小到大排序
  18. 从全志和瑞芯微财报看半导体行业内幕(一)
  19. semantic fusion中的Elastic Fusion 配置记录 Ubuntu16.04
  20. 经典网络结构 (六):DenseNet (Densely Connected Networks 稠密连接网络)

热门文章

  1. 最强奥运会(互联网公司版)
  2. 一逛淘宝就停不下来?秘密在于首屏设计...
  3. 再有人问你synchronized是什么,就把这篇文章发给他。
  4. 代表中国为世界做出探索,杭州城市大脑获IDC亚太区智慧城市大奖
  5. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)...
  6. mysql每秒最多能插入多少条数据 ? 死磕性能压测
  7. radware Alten系列的HA配置
  8. android app 集成 信鸽推送
  9. urlencode使用场景
  10. 干式双离合和湿式双离合的优缺点