当前位置:文档之家› LINUX性能调优方法总结

LINUX性能调优方法总结

LINUX性能调优方法总结大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数。

可以修改这些参数来分配更多的内存,从而改进网络性能。

设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值。

幸运的是,sysctl 可以读取 /etc/sysctl.conf 中的值并根据需要填充/proc,这样就能够更轻松地管理这些参数。

清单 2 展示在互联网服务器上应用于 Internet 服务器的一些比较激进的网络设置。

# Use TCP syncookies when needednet.ipv4.tcp_syncookies = 1# Enable TCP window scalingnet.ipv4.tcp_window_scaling: = 1# Increase TCP max buffer sizenet.core.rmem_max = 16777216net.core.wmem_max = 16777216# Increase Linux autotuning TCP buffer limitsnet.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216# Increase number of ports availablenet.ipv4.ip_local_port_range = 1024 65000将这些设置添加到 /etc/sysctl.conf 的现有内容中。

第一个设置启用TCP SYN cookie。

当从客户机发来新的 TCP 连接时,数据包设置了 SYN 位,服务器就为这个半开的连接创建一个条目,并用一个 SYN-ACK 数据包进行响应。

在正常操作中,远程客户机用一个 ACK 数据包进行响应,这会使半开的连接转换为全开的。

有一种称为 SYN 泛滥(SYN flood)的网络攻击,它使 ACK 数据包无法返回,导致服务器用光内存空间,无法处理到来的连接。

SYNcookie 特性可以识别出这种情况,并使用一种优雅的方法保留队列中的空间(细节参见参考资料一节)。

大多数系统都默认启用这个特性,但是确保配置这个特性更可靠。

启用 TCP 窗口伸缩使客户机能够以更高的速度下载数据。

TCP 允许在未从远程端收到确认的情况下发送多个数据包,默认设置是最多 64 KB,在与延迟比较大的远程客户机进行通信时这个设置可能不够。

窗口伸缩会在头中启用更多的位,从而增加窗口大小。

后面四个配置项增加 TCP 发送和接收缓冲区。

这使应用程序可以更快地丢掉它的数据,从而为另一个请求服务。

还可以强化远程客户机在服务器繁忙时发送数据的能力。

最后一个配置项增加可用的本地端口数量,这样就增加了可以同时服务的最大连接数量。

在下一次引导系统时,或者下一次运行 sysctl -p /etc/sysctl.conf 时,这些设置就会生效。

----------------------------------------------------------------------------------------------------------------------------磁盘子系统的调优磁盘在 LAMP 架构中扮演着重要的角色。

静态文件、模板和代码都来自磁盘,组成数据库的数据表和索引也来自磁盘。

对磁盘的许多调优(尤其是对于数据库)集中于避免磁盘访问,因为磁盘访问的延迟相当高。

因此,花一些时间对磁盘硬件进行优化是有意义的。

首先要做的是,确保在文件系统上禁用 atime 日志记录特性。

atime 是最近访问文件的时间,每当访问文件时,底层文件系统必须记录这个时间戳。

因为系统管理员很少使用 atime,禁用它可以减少磁盘访问时间。

禁用这个特性的方法是,在 /etc/fstab 的第四列中添加 noatime 选项。

演示如何启用 noatime 的 fstab 示例/dev/VolGroup00/LogVol00 / ext3 defaults,noatime 1 1 LABEL=/boot /boot ext3 defaults,noatime 1 2 devpts /dev/pts devpts gid=5,mode=620 0 0tmpfs /dev/shm tmpfs defaults 0 0proc /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0LABEL=SWAP-hdb2 swap swap defaults 0 0LABEL=SWAP-hda3 swap swap defaults 0 0有多种磁盘硬件组合,而且 Linux 不一定能够探测出访问磁盘的最佳方式。

可以使用 hdparm 命令查明和设置用来访问 IDE 磁盘的方法。

hdparm -t/path/to/device 执行速度测试,可以将这个测试结果作为性能基准。

为了使结果尽可能准确,在运行这个命令时系统应该是空闲的。

在 /dev/hd 上执行的速度测试# hdparm -t /dev/hda/dev/hda:Timing buffered disk reads: 182 MB in 3.02 seconds = 60.31 MB/sechdparm 的常用选项选项描述-vi 向磁盘查询它支持的设置以及它正在使用的设置。

-c 查询/启用 (E)IDE 32 位 I/O 支持。

hdparm -c 1 /dev/hda 启用这个设置。

-m 查询/设置每中断多扇区模式。

如果设置大于零,设置值就是每个中断可以传输的最大扇区数量。

-d 1 -X 启用直接内存访问(DMA)传输并设置 IDE 传输模式。

hdparm 手册页详细说明了在 -X 后面可以设置的数字。

只有在 -vi 说明目前并未使用最快速的模式的情况下,才需要进行这个设置。

不幸的是,对于Fiber Channel and Small Computer Systems Interface(SCSI)系统,调优依赖于具体的驱动器。

必须将有帮助的设置添加到启动脚本中,比如 rc.local。

----------------------------------------------------------------------------------------------------------------------------TCP/IP子系统的调优所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数, 后面是它们的含义:1. /proc/sys/net/core/rmem_max —最大的TCP数据接收缓冲2. /proc/sys/net/core/wmem_max —最大的TCP数据发送缓冲3. /proc/sys/net/ipv4/tcp_timestamps —时间戳在(请参考RFC 1323)TCP的包头增加12个字节4. /proc/sys/net/ipv4/tcp_sack —有选择的应答5. /proc/sys/net/ipv4/tcp_window_scaling —支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为16. rmem_default —默认的接收窗口大小7. rmem_max —接收窗口的最大大小8. wmem_default —默认的发送窗口大小9. wmem_max —发送窗口的最大大小/proc目录下的所有内容都是临时性的, 所以重启动系统后任何修改都会丢失.建议在系统启动时自动修改TCP/IP参数:把下面代码增加到/etc/rc.local文件, 然后保存文件, 系统重新引导的时候会自动修改下面的TCP/IP参数:echo 256960 > /proc/sys/net/core/rmem_defaultecho 256960 > /proc/sys/net/core/rmem_maxecho 256960 > /proc/sys/net/core/wmem_defaultecho 256960 > /proc/sys/net/core/wmem_maxecho 0 > /proc/sys/net/ipv4/tcp_timestampsecho 1 > /proc/sys/net/ipv4/tcp_sackecho 1 > /proc/sys/net/ipv4/tcp_window_scalingTCP/IP参数都是自解释的, TCP窗口大小设置为256960, 禁止TCP的时间戳(取消在每个数据包的头中增加12字节), 支持更大的TCP窗口和TCP有选择的应答.上面数值的设定是根据互连网连接和最大带宽/延迟率来决定.注: 上面实例中的数值可以实际应用, 但它只包含了一部分参数.另外一个方法: 使用 /etc/sysctl.conf 在系统启动时将参数配置成您所设置的值:net.core.rmem_default = 256960net.core.rmem_max = 256960net.core.wmem_default = 256960net.core.wmem_max = 256960net.ipv4.tcp_timestamps = 0net.ipv4.tcp_sack =1net.ipv4.tcp_window_scaling = 1----------------------------------------------------------------------------------------------------------------------------文件子系统的调优ulimit -a 用来显示当前的各种用户进程限制。

Linux对于每个用户,系统限制其最大进程数。

为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个:ulimit -u 10000对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,最好通过使用ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。

ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024 其他建议设置成无限制(unlimited)的一些重要设置是:数据段长度:ulimit -d unlimited最大内存大小:ulimit -m unlimited堆栈大小:ulimit -s unlimitedCPU 时间:ulimit -t unlimited虚拟内存:ulimit -v unlimited暂时地,适用于通过 ulimit 命令登录 shell 会话期间。

相关主题