linux的php优化,linux优化转载
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优化转载相关推荐
- 如何优化linux系统
如何优化linux系统? 1.配置更新yum源 2.关闭selinux和iptables 3.使用普通用户工作,并通过sudo按命令分类授权管理 4.最小化安装系统,只装需要的软件包 5.chattr ...
- linux内核参数注释与优化
目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少 ...
- 优化Linux系统中的服务
优化Linux系统中的服务 实验要求 设置Linux系统每次开机后自动进入字符模式界面. 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务: atd.bluetooth.c ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- Linux 2.6.31内核优化指南
Linux 2.6.31内核优化指南 作者:Ken Wu Email: ken.wug@gmail.com 转载本文档请注明原文链接 http://kenwublog.com/docs/linux-k ...
- Linux转发性能评估与优化之——转发瓶颈分析与解决方案
线速问题 很多人对这个线速概念存在误解.认为所谓线速能力就是路由器/交换机就像一根网线一样.而这,是不可能的.应该考虑到的一个概念就是延迟.数据包进入路由器或者交换机,存在一个核心延迟操作,这就是选路 ...
- 嵌入式linux内存使用和性能优化
这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...
- linux启动时间极限优化,Linux启动时间的极限优化
在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...
- 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )
文章目录 一.禁止 / 开启内核抢占 与 方法保护临界区 二.编译器优化屏障 三.preempt_disable 禁止内核抢占 源码 四.preempt_enable 开启内核抢占 源码 一.禁止 / ...
- 【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
文章目录 一.内存屏障 二.编译器屏障 三.处理器内存屏障 一.内存屏障 内存屏障 , 又称为 " 屏障指令 " , 用于保证 " 编译器 " 或 " ...
最新文章
- 在Mac上使用pip3安装交互式环境IPython实录
- [改善Java代码]不要主动进行垃圾回收
- RecyclerView悬浮标题
- 怎么将excel中的url批量转化为图片_阿里云+Power BI,轻松实现图片可视化报告(一)...
- Go连接MySql数据库too many connections
- Mysql安装问题汇总
- Python中文编码 - Python零基础入门教程
- 大型项目用python吗_在大型项目上,Python 是个烂语言吗?
- 职场不是家,不会方法,如何混职场
- java课程心得_Java课程感想
- ▲▲▲▲▲▲▲▲▲▲▲yum源的配置(本地和ftp)▲▲▲▲▲▲▲▲▲▲▲▲▲v...
- python lambda拉姆达表达式
- easyui动态修改required
- 毕业寄语 | 关于毕业季的温柔文案
- 使用set集合去除重复元素
- Opencv4学习-3、进阶图像基本操作1
- android 录像 视频大小,Android相机 – 录制视频时预览放大
- easyExcel工具
- DOM是什么意思-前端入门
- 分享一款在线视频播放器:h-player
热门文章
- SQL 2005/2008 清空收缩日志
- Mac OS X下配置Cocos2d-x for Android(Eclipse)IOS(Xcode)开发环境
- 【转】BI 入门: 体系架构及相关技术
- 如何授权用户访问网站 - [MOSS 2007应用日记]
- 留存率提高20%+,如何通过产品迭代做用户增长?
- 移动产品经理必须要知道的11件事
- 优化网站性能 提高网站速度访问速度的14条实践
- linux达人养成计划学习笔记(四)—— 压缩命令
- 深度剖析Kubernetes API Server三部曲 - part 2
- Content-Type简要说明