最近很多朋友在群里问谁会系统优化这个问题,这个问题博大精:要熟习系统环境,软件,及网络协议等。我做运维不久我就依照我的写出优化的履历分享给大家把。可能说的很差劲当然是娱乐就行了。
对付系统优化系统是为了提高系统的性能吧,我觉得一个别系做的事情越少并且做到极致,这样对付就能提升性能了。
那么你就要考虑你这台做事器是来做什么的是WEB,数据库,缓存,负载均衡等等,根据你的做事做的事情来优化把他发挥到极致。

1.硬件的选择
对付多少内存多少CPU 什么硬盘,硬件的选择也很主要。
例如:处理器对付运用和数据库做事器来讲是最主要的硬件子系统之一。然而在这些系统中,CPU
常常是性能的瓶颈;磁盘IO问题;内存不敷问题。
2 关闭daemons和端口
有些运行在做事器中的daemons (后台做事),并不是完备必要的。关闭这些daemons 可释
放更多的内存、减少启动韶光并减少CPU 处理的进程数。减少daemons 数量的同时也增强
了做事器的安全性。缺省情形下,多数做事器都可以安全地停掉几个daemons。
ntsysv 装完后把不必要的做事全部关掉, namp 扫描你开了几个端口没必要的全部关掉。
包括分区的优化 例如: /var 单独一个分区比较好 /lib /dev /bin /sbin /etc 一定不能和根 分区的必须在一个分区的。
3 关闭GUI 这里就不说了图形一定要关系 至于为啥不做详细解析,
4 对付进程
进程管理对付任何一个操作系统来说都是最主要的任务之一。高效的进程管理能担保运用平稳有效的运行。
进程便是实行程序运行在处理器上的一个实例。进程可以利用Linux内核所能掌握的任何资源来完成它的任务。
每个进程都有自己的生命周期如创建、实行、结束和肃清。这些阶段在系统启动运行中会被重复无数次。因此从性能角度来看进程生命周期是极其主要的。
进程优先级和Nice值
进程优先级【Process priority】是一个数值,用来让CPU根据动态优先级和静态优先级来决定进程实行的顺序。一个高优先级的进程可以得到更多在处理器上运行的机会。
内核会根据进程的行为和特性利用试探算法【Heuristic Algorithm】来动态调高和调低动态优先级。用户进程可以通过进程Nice的值间接改变静态优先级。
静态优先级高的进程可以得到较长的韶光片【Time Slice】(进程能运行在处理器有多永劫光)。
Linux中Nice值范围为19(最低优先级)到-20(最高优先级),默认值为0。要将Nice值变动为负数,必须通过登录或利用su命令由root实行。
例如:/bin/taskset -c 0,1,2,3,4,5,6,7 /usr/local/mysql-5.0.89/bin/mysqld_safe &
充分均匀分配 CPU 。
5内核的优化
linux的优化最难的也便是内核的优化了
内核参数保存在/proc(特殊是/proc/sys),供应了内核、处理器、内存、网络及其他组件的相
关参数。每个实行的进程都有一个以相应PID 命名的目录。
net.ipv4 的参数实在便是大部分是传输优化层的TCP协议,这哀求对TCP/IP 非常熟习才能做到的!
下面是我对一台WEB 做事器的优化参数,
减少TCP 连接中的TIME-WAIT sockets:
编辑/etc/sysctl.conf文件
net.ipv4.tcp_syncookies = 1 // 表示开启SYN Cookies。当涌现SYN等待行列步队溢出时,启用cookies来处理,可戒备少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 //表示开启重用。许可将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 //表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
用以下语句查看做事器的TCP状态:
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}
net.ipv4.ip_local_port_range = 32768 65000 // 许可系统打开的端口范围。
net.ipv4.tcp_keepalive_time = 30 // 当keepalive起用的时候,TCP发送keepalive的频度。缺省是2小时
net.ipv4.tcp_max_tw_buckets = 60000 // timewait的数量,默认是180000。
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将急速被打消并打印警告信息。默认为180000,改为 60000。
对付Apache、Nginx等做事器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对付Squid,效果却不大。
此项参数可以掌握TIME_WAIT套接字的最大数量,避免Squid做事器被大量的TIME_WAIT套接字拖去世。
net.ipv4.tcp_max_syn_backlog = 65536 //记录的那些尚未收到客户端确认信息的连接要求的最大值。对付有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.core.netdev_max_backlog = 32768 //每个网络接口吸收数据包的速率比内核处理这些包的速率快时,许可送到行列步队的数据包的最大数目。
net.core.somaxconn = 32768 //web运用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限定到128,
而nginx定义的NGX_LISTEN_BACKLOG默认为511,以是有必要调度这个值。
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216 //最大socket读buffer,可参考的优化值:873200
net.core.wmem_max = 16777216 //最大socket写buffer,可参考的优化值:873200
net.ipv4.tcp_timestsmps = 0 //韶光戳可以避免序列号的卷绕。一个1Gbps的链路肯定会碰着以前用过的序列号。韶光戳能够让内核接管这种“非常”的数据包。这里须要将其关掉
net.ipv4.tcp_synack_retries = 2 //为了打开对真个连接,内核须要发送一个SYN并附带一个回应前面一个SYN的ACK。
也便是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries = 2 //在内核放弃建立连接之前发送SYN包的数量
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_wmem = 8192 436600 873200 // TCP写buffer,可参考的优化值: 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200 // TCP读buffer,可参考的优化值: 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000 // 同样有3个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP谢绝分配socket.
上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
net.ipv4.tcp_max_orphans = 3276800 //系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。
如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。
这个限定仅仅是为了防止大略的DoS攻击,不能过分依赖它或者人为地减小这个值,更该当增加这个值(如果增加了内存之后)。
net.ipv4.tcp_fin_timeout = 30 //如果套接字由本端哀求关闭,这个参数决定了它保持在FIN-WAIT-2状态的韶光。
对端可以出错并永久不关闭连接,乃至意外当机。缺省值是60秒。2.2 内核的常日值是180秒,
你可以按这个设置,但要记住的是,纵然你的机器是一个轻载的WEB做事器,
也有由于大量的去世套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,
由于它最多只能吃掉1.5K内存,但是它们的生存期长些。
6 内存的调优
内存子系统的调优不是很随意马虎,须要一直地监测来担保内存的改变不会对做事器的其他子系统造成负面影响。
如果要改变虚拟内存参数(在/proc/sys/vm),建议您每次只改变一个参数然后监测效果。对与虚拟内存的调度包括以下几个项目:
_ 配置Linux内核如何更新dirty buffers到磁盘。磁盘缓冲区用于暂存磁盘的数据。
相对付内存来讲,磁盘缓冲区的速率很慢。因此,如果做事器利用这类内存,性能会成问题。当缓冲区内的数据完备dirty,
利用:sysctl -w vm.bdflush=\公众30 500 0 0 500 3000 60 20 0\"大众
vm.bdflush有9个参数,但是建议您只改变个中的3个:
1 nfract, 为排队写入磁盘前,bdflush daemon许可的缓冲区最大百分比
2 ndirty, 为bdflush即刻写的最大缓冲区的值。如果这个值很大,bdflush须要更多的韶光完成磁盘的数据更新。
3 nfract_sync, 发生同步前,缓冲区变dirty的最大百分比。
配置kswapd daemon,指定Linux的内存交流页数量
sysctl -w vm.kswapd=\公众1024 32 64\公众
三个参数的描述如下:
– tries_base 相称于内核每次所交流的“页”的数量的四倍。对付有很多交流信息的系统,增加这个值可以改进性能。
– tries_min 是每次kswapd swaps出去的pages的最小数量。
– swap_cluster 是kswapd 即刻写如的pages数量。数值小,会提高磁盘I/O的性能;数值大可能也会对要求行列步队产生负面影响。
如果要对这些参数进行改动,请利用工具vmstat检讨对性能的影响。其它可以改进性能的虚拟内存参数为:
_ buffermem
_ freepages
_ overcommit_memory
_ page-cluster
_ pagecache
_ pagetable_cache
7 上面对 物理层 网络层 传输层 的优化,运用层的优化也是不可短缺的,便是针对做事的优化了。
./configure --prefix=/usr/local/mysql-5.0.89/
--with-unix-socket-path=/tmp/mysql.sock --localstatedir=/usr/local/mysql-5.0.89/data \
--without-debug \ //去除debug模式
--enable-thread-safe-client \ //以线程办法编译客户端
--enable-assembler \ //利用一些字符函数的汇编版本
--enable-profiling \ //编译一个版本带有查询取样代码
--enable-community-features \ //停用附加功能供应的用户社区
--with-mysqld-ldflags=-all-static \ // 以纯静态办法编译做事端
--with-client-ldflags=-all-static \ // 以纯静态办法编译客户端
--with-charset=latin1 \ //默认编码拉丁文
--with-extra-charset=utf8,gbk \ //支持编码的格式
--with-innodb \ //支持innodb表
--with-scv-storage-engine \ //利用SCV存储引擎
--with-mysqld-user=mysql \ //mysqld的守护进程用户
--without-embedded-server \ //构建嵌入式做事器
--with-server-suffix=-community //附加代价版本的字符串
像mysql 编译的时候就可以优化了 根据你的环境定制。
然后便是装完后优化了例如nginx做weB的优化:
worker_processes 8;
nginx 进程数,建议按照cpu 数目来指定,一样平常为它的倍数。
worker_rlimit_nofile 102400;
worker_rlimit_nofile 102400;
这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值该当是最多打开文
件数(ulimit -n)与nginx 进程数相除,但是nginx 分配要求并不是那么均匀,以是最好与ulimit
-n 的值保持同等
worker_connections 102400;
每个进程许可的最多连接数, 理论上每台nginx 做事器的最大连接数为
worker_processesworker_connections。
keepalive_timeout 60;
keepalive 超时时间。
client_header_buffer_size 4k;
客户端要求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一样平常一个要求
头的大小不会超过1k,不过由于一样平常系统分页都要大于1k,以是这里设置为分页大小。分
页大小可以用命令getconf PAGESIZE 取得
open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建媾和打开文件
数同等,inactive 是指经由多永劫光文件没被要求后删除缓存。
open_file_cache_valid 30s;
这个是指多永劫光检讨一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache 指令中的inactive 参数韶光内文件的最少利用次数,如果超过这个数字,文
件描述符一贯是在缓存中打开的,如上例,如果有一个文件在inactive 韶光内一次没被利用,
它将被移除。
实在还有就不一一列举了
最近很多问我 apache的优化参数 :prefork模式的
<IfModule prefork.c>
StartServers 100
ServerLimit 2000
MaxCLients 1000
MinSpareServers 20
MaxSpareServers 50
MaxRequestsPerChild 10000
详细看http://hzcsky.blog.51cto.com/1560073/473864
实在系统的调优是根据自己的个人环境和哀求调度的,比例说你公司的硬件不能知足 优化的就可以低一点那也是没办法,
我们只要只管即便把当前的环境优化到极致就可以了。像把一台WEB 做事器 优化到正常访问量 达到100MB旁边 那就相称不错。
转载地址:https://blog.51cto.com/hzcsky/516666
博客作者houzaicunsky的原创作品