IT技术博客大学习 共学习 共进步

Linux系统初始化优化推荐策略

懒人运维 2010-04-22 18:25:57 累计浏览 4,241 次
本机暂存

++推荐的分区策略

partition.gif

++不使用atime属性,例需为/data设置notime,可修改/etc/fstab如下:
/dev/sdb1 /data ext3 noatime 0 0
#mount -o noatime,remount /dev/sdb1

++ext3 不执行任何形式的数据日志记录以提供最佳的 ext3 性能
添加data=writeback 于fstab,或在mount时加 -o data=writeback

++调整默认的同时可打开最大文件数以及i-节点数
# echo ‘8192′ > /proc/sys/fs/file-max
# echo ‘32768′ > /proc/sys/fs/inode-max
#加入rc.local
#一般最大打开文件数可设置为每4M物理内存256,即256M内存可设为16384,而最大的使用的i节点应是最大打开文件数目的3-4倍
#cat /proc/sys/fs/file-nr
共有三个值, 第一个是系统开机以来总共打开的文件描述符的数量,第2个是总共的空闲的文件描述符的数量,第3个是最大能打开的文件描述符的数量

++修改内核共享内存限制为256M,默认是32M
echo 268435456 >/proc/sys/kernel/shmall
echo 268435456 >/proc/sys/kernel/shmmax

++禁止广播和ping入
echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo “1″ > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

++sysctl一些优化
sysctl -w net.ipv4.ip_conntrack_max=655360
##解决messages suppressed报错问题
sysctl -w net.ipv4.neigh.default.gc_thresh3=4096
sysctl -w net.ipv4.neigh.default.gc_thresh2=2048
sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=60
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=30
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=60
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1

++进程限制
ulimit -n 4096 # 将每个进程可以打开的文件数目加大到4096,缺省为1024
ulimit -m 4096 # 限制每个进程使用的内存数

++看IO数据
iostat -t 5 5
iostat -x
sar -d 2 20

++32位操作系统文件大小就是2G,for X86-64版本的EL4支持超过2G的文件

++ 相关限制调高
echo “xxxx” >/proc/sys/fs/file-max #整个系统所有可打开文件 总数的限制。xxxx值可按256/4M内存计算。
ulimit -n 10000 #某一程序可打开文件 总数的限制

++ 块大小
mkfs.exe3 -b 4096 -m 1 /dev/sdb1 #使用4k块,保留空间设为1%(default 5%)
#大文件区可以使用较大块增加性能(但大块浪费空间)

++使用tmpfs
tmpfs 文件系统会完全驻留在 RAM 中,速度快,但重启数据将丢失.默认分区大小是系统内存的一半,可以size=1024M修改。
mkdir /dev/shm/ram
mount -bind /dev/shm/ram /RAM

++关闭不需要的tty
vi /etc/inittab
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
把后面4个注释掉.
init q #重新执行/etc/inittab,可以不重启生效。

++关闭ipv6?
vi /etc/modprobe.conf,在文件中添加以下两行
alias net-pf-10 off
alias ipv6 off

++使用 cURL 度量 Web 站点的响应时间
curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://blog.zhangjianfeng.com/
0.052:0.955:1.964
#time_connect 建立到服务器的 TCP 连接所用的时间
#time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
#time_total 完成请求所用的时间
#这些计时器要先于DNS查询。因此,在发出请求之后,Web 服务器处理请求并开始发回数据所用的时间是 0.955-0.052=0.903 秒。客户机从服务器下载数据所用的时间是 1.964-0.955=1.009 秒。
#Firefox 浏览器的 Tamper Data 可以在日志中记录 Web 浏览器发出的每个请求,并显示每个请求所用的下载时间

++使用curl取URL的Head信息
curl -I url

++硬盘读取数据性能
hdparm -tT /dev/sda

++网络文件系统(NFS)
NFS客户端可使用rsize=32768,wsize=32768,intr,noatime 挂装远程文件系统
* 使用大的读/写块(数字指定最大块大小,在这个示例中是 32KB)。
* 在挂起时 NFS 操作可以被中断。
* 不持续更新 atime。
# nfsstat -rc 命令评估客户机连接情况
Client rpc stats:
calls retrans authrefrsh # retrans列是零,这表示系统启动后没有出现需要重新传输的情况。
1465903813 0 0 #如果这个数字比较大,就应该考虑增加 NFS 内核线程,如运行rpc.nfsd 128

++网卡做Bonding
http://blog.zhangjianfeng.com/?p=177

++WEB服务器优化
| 客户端 | ===> |负载均衡器| ===> |反向代理/缓存| ===> |WEB服务器| ===> |数据库服务器|
- Nginx/LVS Squid Apache,PHP MySQL/ORACLE
* eAccelerator/memcache

++ Apache部分特性控制
AllowOverride None #禁止寻找.htaccess,加快响应.
Options FollowSymLinks #不检查相关文件是不是符号连接,加快响应.
MaxKeepAliveRequests 50 #一次持续长连接最多允许接收几次请求,如太大会消耗更多内存
KeepAliveTimeout 5 #长连接在无活动后等待多久自动关闭,太小会导致频繁创建新的进程,太大会占连接
<IfModule worker.c>
ServerLimit 20 #服务器允许配置的进程数上限
ThreadLimit 200 #每个子进程可配置的线程数上限
StartServers 5 #服务器启动时建立的子进程数
MinSpareThreads 50 #最小空闲线程数
MaxSpareThreads 250 # 设置最大空闲线程数
MaxClients 2000 # 同一时间最大接入请求数量(ServerLimit乘ThreadsPerChild的值)
ThreadsPerChild 100 #每个子进程建立的常驻的执行线程数,子进程在启动时建立这些线程后就不再建立新的线程了
MaxRequestsPerChild 10000 ##每个进程只响应xxxx次,超过此数后关闭自身并启用新的进程
</IfModule>
Timeout 300 #客户程序和服务器连接的超时间隔
KeepAlive On #用于支持HTTP 1.1版本的一次连接、多次传输功能
MaxKeepAliveRequests 100 #一次连接可以进行的HTTP请求的最大请求次数。其值为0时为不限制
#ExtendedStatus On #服务器提供运行状态信息。
#ServerAdmin you@your.address
KeepAliveTimeout 15 #一次连接中的多次请求传输之间的时间,超过定义值后,服务器就断开连接。-找相对低端的机器处理图片和 HTML 页面,使用squid或设置KeepAlives off ,来减少断开连接的时间。
-将图片与页面服务器进行分离,因图片传输需要的时间更长,传输需要花很大开销在建立连接上,apache并发性能肯定会下降
-Web目录中文件数不要太多(超过1000),文件越多花费在定位上的时间也越多.

++其它
对于 PHP 脚本而言,主要的瓶颈是 CPU ,对于静态页面而言,瓶颈是内存和网络。
3、Apache 处理 PHP 脚本的速度要比静态页面慢 2-10 倍,因此尽量采用多的静态页面,少的脚本。
4、PHP 脚本如果不做缓冲,每次调用都需要编译,因此,安装一个 PHP 缓冲产品能提升 25-100% 的性能。

[第三方软件优化]
18、如果喜欢从修改 Apache 源码入手,可以安装 lingerd。在页面产生和发送后,每个 Apache 进程都会浪费一段时光在客户连接上,Lingerd 能接管这项工作,让 Apache 迅速服务下一个客户请求。
19、如果你足够勇敢的话,还可以采用 Silicon Graphics 的 Accelerated Apache 补丁。这个工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 4 倍。
安装一个 PHP 缓冲产品能提升 25-100% 的性能。

++Test Web server’s compression support
http://www.port80software.com/products/httpzip/compresscheck

++APACHE优化原则
1点击/秒以下,可以不优化apache与系统的接口
1点击/秒以上,需要优化apache与系统的接口
每日PV数 / 86400秒 * 10个派生连接数 * 5秒内响应 * 5倍峰值) / Web服务器台数 = 同时连接数

++buffer 设置
/proc/sys/net/core/rmem_default & /proc/sys/net/core/wmem_default

++性能瓶径值
CPU >80%
vmstat 中r(run)<5,b(behind)≈0,
IBM RS/6000: 好 坏 糟糕
CPU: user% + sys%< 70% user% + sys%= 85% user% + sys%=90%+
磁盘: iowait % < 30% iowait % =40% iowait % = 50%+
内存: 无pagein pageout 每个CPU 达到10 page/秒 更多的pagein pageout
网络 < 30% 网络带宽
运行队列(Run Queue) < 2 * CPU个数

一般来说vmstat的性能指标为:wa不超过25,us+sy多用户情况下不超过80%,r和b不高于5,pi和po基本为零,fr:sr 接近1:1(当然都为零最好),fre一般不要底到120.

++IO调整优化
cat /sys/block/sda/queue/scheduler #确定正在使用的是哪个 I/O 调度程序
在grub.conf的相应启动选项里加入elevator=deadline,如:
kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
#Deadline的I/O调度器,在数据吞吐量非常大的数据库系统中表现得更有优势。

++各瓶径判断方向
用iostat、sar、tprof检测是否是CPU原因
用vmstat、svmon检测是否是内存原因
用filemon、iostat检测是否是硬盘原因
用netstat 、nfsstat检测是否是网络原因
++一些概念
Pageout 指的是磁盘上内存页从物理内存到 Swap 空间的转移
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,201)
  2. 我的 RHCA 之路 (累计阅读 13,920)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,040)
  4. 给程序员新手的一些建议 (累计阅读 13,021)
  5. Linux 性能监控、测试、优化工具 (累计阅读 12,941)
  6. 关于linux内存free的一些事情 (累计阅读 12,740)
  7. ps - 按进程消耗内存多少排序 (累计阅读 12,600)
  8. Google怎么用linux (累计阅读 12,461)
  9. find命令的一点注意事项 (累计阅读 11,780)
  10. Linux Used内存到底哪里去了? (累计阅读 11,741)