Linux 性能优化详述.docx
《Linux 性能优化详述.docx》由会员分享,可在线阅读,更多相关《Linux 性能优化详述.docx(16页珍藏版)》请在冰豆网上搜索。
Linux性能优化详述
Linux性能优化详述
一、前言
本文档将在以下几个方面来阐述如何针Linux进行性能优化。
1)LinuxProc文件系统,通过Proc文件系统进行调整,达到性能优化的目的。
2)Linux性能诊断工具,介绍如何使用Linux自带的诊断工具进行性能诊断。
二、/proc/sys/kernel/优化
1)/proc/sys/kernel/ctrl-alt-del
该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应。
这两个值分别是:
零(0)值,表示捕获ctrl+alt+delete,并将其送至init程序。
这将允许系统可以安全地关闭和重启,就好象输入shutdown命令一样。
壹
(1)值,表示不捕ctrl+alt+delete,将执行非正常的关闭,就好象直接关闭电源一样。
缺省设置:
0。
建议设置:
1,防止意外按下ctrl+alt+delete导致系统非正常重启。
2)proc/sys/kernel/msgmax
该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)。
进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。
缺省设置:
8192。
3)/proc/sys/kernel/msgmnb
该文件指定一个消息队列的最大长度(bytes)。
缺省设置:
16384。
4)/proc/sys/kernel/msgmni
该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列。
缺省设置:
16。
5)/proc/sys/kernel/panic
该文件表示如果发生“内核严重错误(kernelpanic)”,则内核在重新引导之前等待的时间(以秒为单位)。
零(0)秒,表示在发生内核严重错误时将禁止自动重新引导。
缺省设置:
0。
6)proc/sys/kernel/shmall
该文件表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。
缺省设置:
2097152。
7)/proc/sys/kernel/shmmax
该文件表示内核所允许的最大共享内存段的大小(bytes)。
缺省设置:
33554432。
建议设置:
物理内存*50%。
实际可用最大共享内存段大小=shmmax*98%,其中大约2%用于共享内存结构。
可以通过设置shmmax,然后执行ipcs-l来验证。
8)/proc/sys/kernel/shmmni
该文件表示用于整个系统的共享内存段的最大数目(个)。
缺省设置:
4096。
9)/proc/sys/kernel/threads-max
该文件表示内核所能使用的线程的最大数目。
缺省设置:
2048。
10)/proc/sys/kernel/sem
该文件用于控制内核信号量,信号量是SystemVIPC用于进程间通讯的方法。
建议设置:
25032000100128。
第一列,表示每个信号集中的最大信号量数目。
第二列,表示系统范围内的最大信号量总数目。
第三列,表示每个信号发生时的最大系统操作数目。
第四列,表示系统范围内的最大信号集总数目。
所以,(第一列)*(第四列)=(第二列)
以上设置,可以通过执行ipcs-l来验证。
三、/proc/sys/vm/优化
1)/proc/sys/vm/block_dump
该文件表示是否打开BlockDebug模式,用于记录所有的读写及DirtyBlock写回动作。
缺省设置:
0,禁用BlockDebug模式。
2)/proc/sys/vm/dirty_background_ratio
该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。
缺省设置:
10。
3)/proc/sys/vm/dirty_expire_centisecs
该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。
缺省设置:
3000(1/100秒)。
4)/proc/sys/vm/dirty_ratio
该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘。
缺省设置:
40。
5)/proc/sys/vm/dirty_writeback_centisecs
该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘。
缺省设置:
500(1/100秒)。
6)/proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inodecache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inodecache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inodecache;增加该值超过100,将导致内核倾向于回收directory和inodecache。
缺省设置:
100。
7)/proc/sys/vm/min_free_kbytes
该文件表示强制LinuxVM最低保留多少空闲内存(Kbytes)。
缺省设置:
724(512M物理内存)。
8)/proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。
缺省设置:
2(只读)。
9)/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
缺省设置:
0。
10)/proc/sys/vm/overcommit_ratio
该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:
50(%)。
11)/proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:
3(2的3次方,8页)。
12)/proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。
缺省设置:
60。
13)legacy_va_layout
该文件表示是否使用最新的32位共享内存mmap()系统调用,Linux支持的共享内存分配方式包括mmap(),Posix,SystemVIPC。
0,使用最新32位mmap()系统调用。
1,使用2.4内核提供的系统调用。
缺省设置:
0。
14)nr_hugepages
该文件表示系统保留的hugetlb页数。
15)hugetlb_shm_group
该文件表示允许使用hugetlb页创建SystemVIPC共享内存段的系统组ID。
四、/proc/sys/fs/优化
1)/proc/sys/fs/file-max
该文件指定了可以分配的文件句柄的最大数目。
如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。
缺省设置:
4096。
建议设置:
65536。
2)/proc/sys/fs/file-nr
该文件与file-max相关,它有三个值:
已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目
该文件是只读的,仅用于显示信息。
五、/proc/sys/net/core/优化
该目录下的配置文件主要用来控制内核和网络层之间的交互行为。
1)/proc/sys/net/core/message_burst
写新的警告消息所需的时间(以1/10秒为单位);在这个时间内系统接收到的其它警告消息会被丢弃。
这用于防止某些企图用消息“淹没”系统的人所使用的拒绝服务(DenialofService)攻击。
缺省设置:
50(5秒)。
2)/proc/sys/net/core/message_cost
该文件表示写每个警告消息相关的成本值。
该值越大,越有可能忽略警告消息。
缺省设置:
5。
3)/proc/sys/net/core/netdev_max_backlog
该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
缺省设置:
300。
4)/proc/sys/net/core/optmem_max
该文件表示每个套接字所允许的最大缓冲区的大小。
缺省设置:
10240。
5)/proc/sys/net/core/rmem_default
该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。
缺省设置:
110592。
6)/proc/sys/net/core/rmem_max
该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。
缺省设置:
131071。
7)/proc/sys/net/core/wmem_default
该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。
缺省设置:
110592。
8)/proc/sys/net/core/wmem_max
该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。
缺省设置:
131071。
六、/proc/sys/net/ipv4/优化
1)/proc/sys/net/ipv4/ip_forward
该文件表示是否打开IP转发。
0,禁止
1,转发
缺省设置:
0
2)/proc/sys/net/ipv4/ip_default_ttl
该文件表示一个数据报的生存周期(TimeToLive),即最多经过多少路由器。
缺省设置:
64。
增加该值会降低系统性能。
3)/proc/sys/net/ipv4/ip_no_pmtu_disc
该文件表示在全局范围内关闭路径MTU探测功能。
缺省设置:
0。
4)/proc/sys/net/ipv4/route/min_pmtu
该文件表示最小路径MTU的大小。
缺省设置:
552。
5)/proc/sys/net/ipv4/route/mtu_expires
该文件表示PMTU信息缓存多长时间(秒)。
缺省设置:
600(秒)。
6)/proc/sys/net/ipv4/route/min_adv_mss
该文件表示最小的MSS(MaximumSegmentSize)大小,取决于第一跳的路由器MTU。
缺省设置:
256(bytes)。
6.1IPFragmentation
1)/proc/sys/net/ipv4/ipfrag_low_thresh
/proc/sys/net/ipv4/ipfrag_low_thresh
两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。
缺省设置:
196608(ipfrag_low_thresh);
262144(ipfrag_high_thresh)。
2)/proc/sys/net/ipv4/ipfrag_time
该文件表示一个IP分段在内存中保留多少秒。
缺省设置:
30(秒)。
6.2INETPeerStorage
1)/proc/sys/net/ipv4/inet_peer_threshold
INET对端存储器某个合适值,当超过该阀值条目将被丢弃。
该阀值同样决定生存时间以及废物收集通过的时间间隔。
条目越多,存活期越低,GC间隔越短。
缺省设置:
65664。
2)/proc/sys/net/ipv4/inet_peer_minttl
条目的最低存活期。
在重组端必须要有足够的碎片(fragment)存活期。
这个最低存活期必须保证缓冲池容积是否少于inet_peer_threshold。
该值以jiffies为单位测量。
缺省设置:
120。
3)/proc/sys/net/ipv4/inet_peer_maxttl
条目的最大存活期。
在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:
缓冲池中的条目数目非常少),不使用的条目将会超时。
该值以jiffies为单位测量。
缺省设置:
600。
4)/proc/sys/net/ipv4/inet_peer_gc_mintime
废物收集(GC)通过的最短间隔。
这个间隔会影响到缓冲池中内存的高压力。
该值以jiffies为单位测量。
缺省设置:
10。
5)/proc/sys/net/ipv4/inet_peer_gc_maxtime
废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。
该值以jiffies为单位测量。
缺省设置:
120。
6.3TCPVariables
1)/proc/sys/net/ipv4/tcp_syn_retries
该文件表示本机向外发起TCPSYN连接超时重传的次数,不应该高于255。
该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。
缺省设置:
5。
2)/proc/sys/net/ipv4/tcp_keepalive_probes
该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。
保持连接仅在SO_KEEPALIVE套接字选项被打开时才被发送。
缺省设置:
9(次)。
3)/proc/sys/net/ipv4/tcp_keepalive_time
该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。
缺省设置:
7200(2小时)。
4)/proc/sys/net/ipv4/tcp_keepalive_intvl
该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。
缺省设置:
75(秒)。
5)/proc/sys/net/ipv4/tcp_retries1
该文件表示放弃回应一个TCP连接请求前进行重传的次数。
缺省设置:
3。
6)/proc/sys/net/ipv4/tcp_retries2
该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。
缺省设置:
15。
7)/proc/sys/net/ipv4/tcp_orphan_retries
在近端丢弃TCP连接之前,要进行多少次重试。
默认值是7个,相当于50秒–16分钟,视RTO而定。
如果您的系统是负载很大的web服务器,那么也许需要降低该值,这类sockets可能会耗费大量的资源。
另外参考tcp_max_orphans。
8)/proc/sys/net/ipv4/tcp_fin_timeout
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。
对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
默认值为60秒。
过去在2.2版本的内核中是180秒。
您可以设置该值,但需要注意,如果您的机器为负载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,FIN-WAIT-2sockets的危险性低于FIN-WAIT-1,因为它们最多只吃1.5K的内存,但是它们存在时间更长。
另外参考tcp_max_orphans。
缺省设置:
60(秒)。
9)/proc/sys/net/ipv4/tcp_max_tw_buckets
系统在同时所处理的最大timewaitsockets数目。
如果超过此数的话,time-waitsocket会被立即砍除并且显示警告信息。
之所以要设定这个限制,纯粹为了抵御那些简单的DoS攻击,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。
缺省设置:
180000
10)/proc/sys/net/ipv4/tcp_tw_recyle
打开快速TIME-WAITsockets回收。
除非得到技术专家的建议或要求,请不要随意修改这个值。
缺省设置:
0。
11)/proc/sys/net/ipv4/tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
缺省设置:
0。
12)/proc/sys/net/ipv4/tcp_max_orphans
系统所能处理不属于任何进程的TCPsockets最大数量。
假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。
之所以要设定这个限制,纯粹为了抵御那些简单的DoS攻击,千万不要依赖这个或是人为的降低这个限制。
缺省设置:
8192。
13)/proc/sys/net/ipv4/tcp_abort_on_overflow
当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false。
这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。
只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。
缺省设置:
0。
14)/proc/sys/net/ipv4/tcp_syncookies
该文件表示是否打开TCP同步标签(syncookie),内核必须打开了CONFIG_SYN_COOKIES项进行编译。
同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。
缺省设置:
0.
15)/proc/sys/net/ipv4/tcp_stdurg
使用TCPurgpointer字段中的主机请求解释功能。
大部份的主机都使用老旧的BSD解释,因此如果您在Linux打开它,或会导致不能和它们正确沟通。
缺省设置:
0。
16)/proc/sys/net/ipv4/tcp_max_syn_backlog
对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。
对于超过128Mb内存的系统,默认值是1024,低于128Mb的则为128。
如果服务器经常出现过载,可以尝试增加这个数字。
警告!
假如您将此值设为大于1024,最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE,以保持TCP_SYNQ_HSIZE*160)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale128Mb32768-610000)则系统将忽略所有发送给自己的ICMPECHO请求或那些广播地址的请求。
缺省设置:
1024。
17)/proc/sys/net/ipv4/tcp_window_scaling
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。
参数值为布尔值,为1时表示可变,为0时表示不可变。
tcp/ip通常使用的窗口最大可达到65535字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力。
缺省设置:
1。
18)/proc/sys/net/ipv4/tcp_sack
该文件表示是否启用有选择的应答(SelectiveAcknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对CPU的占用。
缺省设置:
1。
19)/proc/sys/net/ipv4/tcp_timestamps
该文件表示是否启用以一种比超时重发更精确的方法(请参阅RFC1323)来启用对RTT的计算;为了实现更好的性能应该启用这个选项。
缺省设置:
1。
20)/proc/sys/net/ipv4/tcp_fack
该文件表示是否打开FACK拥塞避免和快速重传功能。
缺省设置:
1。
21)/proc/sys/net/ipv4/tcp_dsack
该文件表示是否允许TCP发送“两个完全相同”的SACK。
缺省设置:
1
22)/proc/sys/net/ipv4/tcp_ecn
该文件表示是否打开TCP的直接拥塞通告功能。
缺省设置:
0。
23)/proc/sys/net/ipv4/tcp_reordering
该文件表示TCP流中重排序的数据报最大数量。
缺省设置:
3。
24)/proc/sys/net/ipv4/tcp_retrans_collapse
该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。
缺省设置:
1。
25)/proc/sys/net/ipv4/tcp_wmem
该文件包含3个整数值,分别是:
min,default,max
Min:
为TCPsocket预留用于发送缓冲的内存最小值。
每个TCPsocket都可以使用它。
Default:
为TCPsocket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的值,一般要低于net.core.wmem中default的值。
Max:
为TCPsocket预留用于发送缓冲的内存最大值。
该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。
默认值为128K。
缺省设置:
409616384131072。
26)/proc/sys/net/ipv4/tcp_rmem
该文件包含3个整数值,分别是:
min,default,max
Min:
为TCPsocket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCPsocket都至少会有这么多数量的内存用于接收缓冲。
Default:
为TCPsocket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的net.core.wmem中default的值。
该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP窗口大小为65535。
Max:
为TCPsocket预留用于接收缓冲的内存最大值。
该值不会影响net.core.wmem中max的值,今天选择参数SO_SNDBUF则不受该值影响。
缺省设置:
409687380174760。
27)/proc/sys/net/ipv4/tcp_mem
该文件包含3个整数值,分别是:
low,pressure,high
Low:
当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:
当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:
允许所有tcpsockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
缺省设置:
245763276849