Unix的五条优化的技巧和及时的优化方法 [zt]

发布时间:2024-12-25 21:25

分享五种实用的生活方式优化技巧 #生活乐趣# #生活分享# #家居生活方式# #生活方式博客#

主要内容:

*五条优化的技巧

*及时的优化方法

及时调整:

有时候,你没有时间去理解一些细节:用户和管理让你喘不过气来,而且你必须马上解决一个问题。或许你是一个后备的系统管理员,那天当你的同事在十个用户冲进你们公用的办公室,要求提高性能之前外出了。或许你是一个定了契约的系统管理员需要一个快捷的目录条记录一些可能的系统错误。或许你已经已经一页一页地读了这本书,在寻找一个简明地参考手册,所以你可以抛开那些记满了笔记地小信笺。

在这一章里面,我们将会总结两个常见但是并不简单地问题地一些解决方法:为了确定和解决一般常见地性能的问题,我应该查看哪部分,优化什么。一般来说 ,在一个新系统里面为了确保性能最优化,我是否需要作一些优化?在我们进入到这些主题地之前,一些警告。

警告! 这一章包含一些危险性很高的命令。它阐明了很多解决办法和步骤,但是没有给出解释。作为一个结果,它冒着把你变成一种草包性能分析家的危险(看第二章的介绍)细心一点。

五条首要的优化技巧

当你看到一个系统的性能比较差的时时候,有五个最基本的问题要去查问。注意---如果没有特别指明,所有的这一些临界的指导方针,其数据假定是每隔30秒的间隔收集一次的。

哪里是硬盘的瓶颈?

几乎每一个运行缓慢的系统,都因为磁盘的I/O负荷超载。查看硬盘,如果它的服务时间大于50毫秒,而且不止一部分繁忙。服务时间实际上叫做"响应时间",它测量的是发出一个读请求到完成这个请求的时间间隔。对于用户的应用程序来说,在关键的路径上经常会进行这种测量。这是非常可能的—— 一个严重超负荷的磁盘的响应时间将会以千分之毫秒来计算。(不是印刷错误)。在Solaris系統上,你可以通过命令iostat -xnP 30得到此类信息。

# iostat -xnP 30

....

extended device statistics

扩张设备的统计数据

r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s2

0.7 2.7 5.3 9.5 0.0 0.1 0.0 16.1 0 2 c0t0d0s3

....

在Linux 系统上, 安装包含iostat命令的可选包,察看一下await的列。

# iostat -x -d 30

Linux 2.4.2-2 (aiua) 07/29/2001

....

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await

svctm %util

hde 4.79 1.40 86.95 3.26 158.87 37.43 2.18 1.01 11.22

8.14 7.34

hde1 0.00 0.00 82.15 0.00 82.15 0.00 1.00 0.46 5.64

5.64 4.63

hde2 4.79 1.40 4.80 3.26 76.70 37.43 14.16 0.55 68.05

34.40 2.77

hde5 0.00 0.00 0.00 0.00 0.02 0.00 8.00 0.00 100.00

100.00 0.00

hdg 9.85 2.36 36.69 5.20 371.85 60.86 10.33 8.60 205.22

45.61 19.11

hdg1 0.00 0.00 0.06 0.00 0.07 0.00 1.03 0.00 2.94

2.94 0.00

hdg2 9.85 2.36 36.63 5.20 371.78 60.86 10.34 8.60 205.54

45.68 19.10

....

由于fsflush命令,UFS文件系统有时将会有非常高的服务时间,否则的话,UFS文件系统一般都是空闲的。既然文件系统基本上是空闲的,所以这就不是一个问题。但是我从来没有在Linux系统上见到过这种现象。如果这是一个Solaris的系统,同时它有大于512M的内存,i节点缓存就足够大了。然而,在一些内存比较小的系统上,增大缓存可能可以帮助减少文件系统管理所需要的I/O操作的数量。

有一个解决磁盘I/O问题和尽可能的把负载分布开的基本技巧。通过把一些经常访问的目录或者文件移植到另外一些负载较少的磁盘,或者为了提高写的速度,通过投资一个非挥发性内存缓存的磁盘阵列都可以很好地实现这些要求。

你是否拥有有足够的内存?在Solaris系统上,这里有一个指示灯查看你是否缺少内存,那是vmstat命令的sr字段。请记住vmstat输出的的第一行是没有什么意义的。其他的字段对于回答这个问题在很大程度上也是没有用的。尤其是在Solaris7以及更早的版本。关于这个一点这里有很多误解,其中有两条是非常普遍的。

空闲列表的大小并不是内存是否缺少的一个标志,因为Solaris系统将会为了缓存最近使用的文件而消耗掉没有使用的内存。×每秒钟的页面的调入或者页面调出的数目是一个不好的衡量尺度,因为Solaris系统是通过页面机制处理所有的文件系统的I/O操作的。数千K的页面的调入和调出紧紧意味着系统正在工作而已。

不幸地是,如果你过去已经习惯于在Solaris7系统上查看命令vmstat的输出 ,Solaris8系统改变了它的输出。它现在可以适当地显示一些相关信息:正在被文件缓存系统使用的页被认为是空闲的(因为实际上它们也是)。所以,现在每个人都会问“这些空闲的内存来在哪里?”而他们在Solaris7系统中则问“我的空闲内存哪里去了?”。

一个方法判断你你是否缺少内存仍然是速率--页扫描器扫描页查看它们是否已经被释放。如果你在Solaris7或者更早的版本缺少内存,你应该定制内存每秒250页。如果你是在Solaris8系统上密,任何的页扫描活动都意味着你缺少内存。

处理器是否超载?最好的衡量处理器是否超负荷的标准是查看运行队列的长度。在Solaris系统和Linux系统上都是使用vmstat命令和查看 procs r 字段的值的方法去查看队列的长度的。如果在系统上,这个值大概四倍大于处理器的数目,那么进程就有可能为了得到一个时间片而等待了太长时间。

如果mutex stalls的数目(在Solaris系统上可能是mpstate命令的smtx字段)很大,(大概是过处理器数目的250倍左右),你应该升级你的中央处理器(CPU)到速度更快一些,而不是加多一些。

进程是否被磁盘I/O阻塞了?如果一个进程被阻塞了,它就是磁盘瓶颈的一个标志。你可以通过vmstat命令的 procs b字段查看被阻塞了的进程数目,任何时候任何进程被阻塞了,那么系统就会报告说所有的CPU因为等待I/O而被闲置起来了。

如果被阻塞的进程数目接近或者超过了在运行队列中的进程数目,那就存在一个严重的磁盘瓶颈,你应该重新用iostat命令去查看一遍。如果你正在管理的系統是一个批量处理的环境,你将会看到你的相当多一部分被阻塞的进程。这里没有什么事情必要去担心,但是提高磁盘子系统的性能是一个指示,这将会提高你的批处理工作的吞吐量。

系统时间是否大量地被用户支配了?如果任何的的消耗CPU时间的命令(vmstat,mpstat等)显示更多的CPU时间被内核消耗了(系统时间)而不是使用在运行进程上(用户时间),那你可能遇上问题了。Solaris系统的NFS(网络文件系统)服务器完全运行在内核里面,就像Linux 的可选包knfsd一样,在这种情形下,系统时间预期占主导地位。

如果正在被讨论的系统不是NFS(网络文件系统)服务器,追溯这个问题可能就会困难一点。最好的解决方法就是根据CPU的使用时间去确定首要的为数不多的进程(通过用prstat,top或者ps命令),然后使用一个进程追踪工具比如truss去查看系统正在发出什么命令。如果mutex stall值比较高(mpstat命令 的smtx字段)你应该开始考虑升级你的中央处理器到速度快一点(但是不是增加处理器地数量)。

及时的优化技巧

这一部分介绍了一些性能优化的技巧。当然,这些建议是处理一些一般常见的情形,所以你可以根据你自己的具体环境自由地对它们作出一些修改。对于任何机器来说最好的优化技巧 ,就是把它作为服务器或者是工作站,安装最新版本的操作系统,而且对于维护补丁包也要保持敏感。安装性能补丁包是相当普通的,而且有时候会具有戏剧性的效果。否则将会使你要在旧版的操作系统使用一套新的运算规则了(例如,在Solaris系统里使用页面优先调度)。

单个用户的开发环境的工作站最常见的优化的情形之一就是一台计算机被一个开发用户使用。像这样的用户经常为了编译和其他的任务(它们两者跟处理器和文件系统关系紧密)而要求比较高的性能,但是这些用户在一台大的服务器上可能并没有拥有你所预期的高速的磁盘。

文件系统

我首选的文件系统的布局格式就是把系统磁盘分成两个分区,一个作为交换空间 ,剩下的一个就作为其它的用途。Swap 分区 应该分在磁盘上面较小的那个分区。为什么这样做的理由,请看第五章“通过文件系统的布局最小化文件系统的搜寻时间”.然而,很多的人将不会同意我的观点,这个话题牵连到宗教信仰.如果你有不止一个本地磁盘,为了均匀分布负载你应该在每个磁盘上面都配置一个交换空间分区.在Solaris系统上,所有的文件系统应该被挂载的时候都应该选上login选项,从而当突然掉电的时候可以快速恢复。(见第五章“日志文件系统” )

已挂接的NFS

文件系统(网络文件系统)包含一些基本的无变化的文件,例如像应用程序,为了避免NFS写文件的访问时间应该被挂接成只读状态。如果对你地平台来说那是可能的话,你也应该使用文件缓存系统,,把经常要用到的文件缓存起来——对于应用程序目录来说尤其有用。但是它不因该被使用到邮件目录,对于主目录来说它可能是有用的,这取决于文件的读写操作的侧重点。任何应用程序一般需要进行大量的写操作,那就不应该使用缓存文件系统。你可以在第五章“缓存文件系统’看到更多的关于实现缓存文件系统的信息。

交换空间

选择合适的交换空间的大小其实相当的困难。如果你没有从应用程序供应商那里得到一个较好的建议,那就要至少配置128M的虚拟内存。使用交换文件比使用交换分区显得无序,而且磁盘也便宜一些,而且永远不会被损坏。大部分的桌面主机将永远都不会需要超过512M的分页内存。

内核优化

大多数的操作系统对于这方面已经配置得相当好了,所以这里没有太多工作需要我们去做。除了一个例外,如果你是运行在Solaris7或者更早的版本上面的话,你应该

通过在/etc/system加上下面这一行打开页面优先调度。在低于Solaris 8的版本的系统上打开页面优先调度设置 priority_paging=1,对于页面优先调度的详细解释,请看第四章“页面优先调度”。

工作组服务器

在这一部分,我们将会考虑一个工作组服务器作为一个整体去完成一个小部门的各种各样的任务。这些任务可能包括邮件服务,文件存贮,轻量级的邮件服务等。在一个仅仅只有Unix的环境下,目录将会通过NFS(网络文件系统)与外界关联;在一个使用Samba的Windows 网络的系统环境下,我们将不得不支持SMB/CIFS.这台服务器也可能是这个部门的网络浏览器首要的代理缓存器,也重起任何的瘦客户端、X终端,或者别的跟网络有依赖关系的计算机。这个系统可能通过一些比较快的以太网连接到互联网。

混合工作量可能会大量地增长为NFS(网络文件系统或者是Samba)。

Solaris系统提供的基本的发送邮件软件可以支持至少几百个用户,但是不能超过。如果要做任何的优化,如果你需要支持更多的用户,你可能超出了这个工作组服务器所能胜任的范围。但是像iPlanet这种消息发送器软件产品它采取更加有效的存贮消息的方法可以支持数以百万计的用户。网络服务器的的用途也可能会变成轻量的了。 一台单处理器的UltraSPARC-II或者是告诉的奔3系统就可以轻松的完成这些任务。

内存

这种类型的工作与内存没有特别的关系:最大的的活动的用户程序大概就是发送邮件了,主要内存的剩余部分就会作为文件系统的缓存器。因为由于客户端的缓存机制

大多数的文件仅仅会被请求一次,所以文件系统缓存不需要太大。任何程序如果经常被频繁地读取的话(例如应用程序)就比较适合在客户端通过文件缓存系统挂接。

作为一个粗略的规则,为系统配置128M的初始内存,然后为每个隶属于系统的以太接口增加大概64M的内存。如果你支持X终端或者是Sun的阵列机,你将需要给为每一个终端或者是阵列机器增加大概128M的内存。 客户端将会根据工作量运行( 跟你服务器端增加内存一样也有一个规则指导你在客户端增加内存,那就是至少为每个客户端增加32M内存)。

磁盘

为了保证数据的可靠性和尽可能的提高写的速度,关于硬盘的配置涉到两件最重要的事情。如果你有一个作磁盘阵列的硬件设备(例如Sun的 StorEdge A1000), 把它配置成RAID1+0或者RAID 5 的设备。一切取决与你存贮在上面的内容有多重要(可以参考第六章“RAID的技巧”中我的建议)。 如果你正在配置软件的RAID的话,你将要使用 DisSuite 日志记录选项而不是UFS日志记录选项,后者降低了系统的性能。基于DiskSuite的日志记录文件系统应该使用转速不少与至少7200的分布式磁盘。基于硬件的磁盘阵列可以安全的被挂接带有日志记录选项状态,写进的日志内容将会被缓存在阵列控制的固定存贮器里面。在这个配置中你应该镜像系统的磁盘。

文件系统

我将创建一个单独的,足够大的根分区,就像在工作组服务器中提到的技巧一样。然而,/var 应该分布在一个单独的分区。它将需要加速写的速度。这些跟日志文件系统没有太多关联。相反,我们试图要提高一些操作的性能,比如发送一封邮件到收信箱(一个客户在退出的时候重写这个邮件邮件文件是一个重要的磁盘操作)/var分区应该相当的大,具体多大依赖与你的使用方式。为用户的主目录创建一个单独的文件系统。

交换空间

对于这种类别的工作量,应该不需要太多的交换空间。几百兆已经足够用了。

最优化网络文件系统

对于网络文件系统服务器来说,这里有三条最重要的优化变革:确保你使用的是版本3的NFS(网络文件系统),增加网络文件系统的线程的数目,而且在Solaris系统上,增加TCP缓冲器的大小。版本3的NFS(网络文件系统)实施了一些规则系统的改变,这些规则系统的改变的显著提高了性能,尤其是对于文件的写入。你所有的客户端的NFS(网络文件系统)应该被挂接到他们的文件系统,并且设置参数vers=3。你可以使用nfsstat命令去查看在你的服务器上面是否进行了任何关于版本2的调用。更多的详细的信息请看第七章“NFS(网络文件系统)”。选择一个合适的NFS(网络文件系统)内核线程数目是很重要的。现成的默认值是可以接受的,但是当然它不能让你的系统达到性能最优化。实际上你可以通过编辑这一行/etc/init.d/nfs.server 可以调整参数 nfsd,128是一个合理起始值。/usr/lib/nfs/nfsd -a 128

在Solaris系统上,你将可能需要增加TCP的接受和传送缓存器的大小,它是通过调整tcp_recv_hiwat和tcp_xmit_hiwat两个变量来实现的。你将不得不用一些合理的值去进行试验。一个好的起始值是把tcp_xmit_hiwat设为56KB(57344),把tcp_recv_lowat设为32KB(32768).为了避免在TCP缩放窗口进行调整(?),你不应该把这些值设置到大于64,000的范围。Linux网络服务器拥有同等意义的参数值,但是他们的默认值足够大,不需要进行调整。详细信息,请查看第七章"缓存器,高水位和窗口"

内核调整

你可能希望增加变量maxphys变量的值,从而使内核能够为已不在硬盘上的已修改过的文件分配更多的连续的片。你可以在第四章“文件缓存系统和硬盘的交互”看到更多的关于maxphys的介绍。如果你的Solaris系统主要实施了网络文件系统并且内存少于128M,你就应该增加目录名称寻址缓存的大小,并且i节点缓存。你可以在“ 目录名称寻址缓存”这部分和第五章“i节点缓存”看到更多的关于缓存的信息。增加每个变量到到8,000已经足够了。

×为低内存的服务器提高 dnlc和i节点缓存器

设置 ncsize=8000

设置 UFS(Unix文件系统) ufs_ninode=8000

在Solaris8版本以前的系统,必须打开页面优先调度,请看前面在单用户工作站的介绍或者第四章“页面优先调度”

网络服务器

重建一个网络服务器以提供静态的内容看起来已经成为一种明确的趋向。单独的一台UltraSPARC-II或者是高性能的奔腾3处理器可以容易地使100M的以太网段充斥静态的内容,并且当至少有4个处理器系统的稳定性也是有效地线性增加。当网络朝一个更加动态的媒体发展时,然而,处理器的性能就更加为人所关心。不幸地是,没有更好的规则去衡量动态地HTTP的工作负载仅仅因为工作负载的变化是如此的频繁。

内存

网络服务器为了达到运行快捷,需要相当多的内存,因为他们趋向于当拥有最大的TCP的缓存的时候性能发挥最好,(当有很多的连接时,TCP缓存消耗内存是很快的)和有广泛的文件系统缓存。作为一个粗略的准则,我将会以256M作为内存的起始值,然后增加文件的大写对于大概可以满足90%的请求(你可以通过查阅日志文件得到这方面地消息)。这些将会给你足够的内存去缓存最‘热’的页面。在Solaris8版本之前的系统应当打开页面的优先调度。请看第四章“页面的优先调度”

磁盘

对于每一个很大的网站或者那些为很多网站提供网络服务的系统来说,磁盘存储变成了一个问题。一个单面转速为7,200的磁盘每秒可以支撑大概50个静态的HTTP操作,所以你应当在你打算支撑和条带化磁盘直到它们达到极限地状态下,计算出每秒钟有多少个峰值 。RAID5 磁盘阵列是一个相当不错的选择。在维护的良好地性能的同时它们提供了一些容错的弹性机制。(主要是因为工作负载恰好是倾向于读)。在一些繁忙的网站,条带化和镜像那些包含HTTP日志的目录是必要的。这些日志将会增长很快的,

尤其是在容量高峰期。

文件系统

我仍然建议创建一个单独的,大的根分区,就像在工作组服务器部分中提到的建议一样。然而,就像以前提到, 你应该确保为HTTP的日志文件创建一个分布式的文件系统

,同时采取措施去提高写的速度。是否镜像系统硬盘,你自己决定。在大规模的安装系统中,网络服务器是一组Netra Tls,或者是通过一个负载均衡的开关的别的轻量级的机器, 或者是一个完全的DNS条目。如果你的内部组织的建立是为了它而工作,一台机器的失败并不是一个大问题。你只能去等待这个机器被替换掉,可以通过一些自动化的工具来重装它。当你被提供给前台页面的实际内容是通过以太络服务器通过NFS(网络文件系统)后备系统,这样效果最好。

交换空间

再次声明,网络服务器倾向于不需要太多的交换空间。512M应该足够,就像吸收匿名内存要求它是没有使用过的。更详细的信息,请看第四章“匿名内存”

网络系统

确定网络的大小有一点点小小的技巧。在这里,我们将会集中讨论静态操作。如果你的网络服务器提供很多的动态内容地服务,你将会需要根据你自己工作环境特殊的工作负载自己总结一些方法技巧。表9-1的目的是提供给你一个粗略的方法去调整你的网络容量的大小。举个例子,如果你有1000个用户是通过56K调制解调器拨号上网,你不需要考虑支撑每秒钟超过400HTTP操作。相反的,如果你试图在一个双方都是快速的以太网连接的的环境中每秒钟支撑1000个操作,你可能注定将会失败。

表9-1

Network utilization for HTTP clients HTTP客户网络工具

Network connection Bandwidth 网络连接 带宽

(per second) Peak static HTTP operations/second (每秒)

静态的HTTP操作峰值/秒

56K Dialup 56 Kbps 0.4

ISDN 128 Kbps 1

768K SDSL

(Full-duplex) 768 Kbps 5 (双工)

T1 1.5 Mb/sec 10

Cable modem 6 35 电缆拨号器

Ethernet 10 60 以太网

DS3 45 Mb/sec 300

Fast Ethernet 快速以太网

(Full-duplex) 200 Mb/sec 600

Gigabit Ethernet

(Full-duplex) 2,000 Mb/sec 5,000

关于网络服务器的性能有两个问题你应该很清楚。第一个是安全套接字(也叫做安全HTTP)它绝对是性能的克星。 把每个处理器可以支撑的HTTP操作数目除以10。新一代硬件安全套接字加速卡已经进入市场了。但是对于他们我没有经验,不能给你们提供很好的建议。

第二个问题就是我们应该注意像Solaris的网络缓存加速器这种软件产品。这些产品都运行在内核空间,为(通常是静态的)即将到来的HTTP请求充当一个缓存机制。这中情形引起了从内核拷贝请求到用户空间麻烦,唤醒网络服务器应用程序。从页面储存在任何的缓存(或者坏的磁盘)取得数据 然后在再把它返回到内存。NCA产品仅仅把静态网页缓存在一片内核缓存里面,透明的回答请求,但是速度快多了。新一代的NCA将可能支持动态内容的恢复。另外一个具有同样功能的产品是Tux,对于行相当大的一部分在内核空间Linux来说,它是一个高性能的网络服务器。我们必须注意的是这些产品有时会有稳定性的问题,所以你将需要在配置他们之前细心地去测试一下。

内核优化

对于不完整的连接队列和完整的连接队列,你将可能想要提高默认值。在Solaris系统中,可以通过分别调整tcp_conn_req_max_q0 和tcp_conn_req_max_q这两个参数,1024和128是它们的默认值。这种迹象表明你应该提高tcpListenDrop和tcpListenDropQ0变量到比较大的值,它们可以通过命令 netstat -sP tcp看到。tcp_conn_req_max_q0不应该被设置为大约10,000,tcp_conn_req_max_q不应该被设置超过tcp_conn_req_max_q0.在Linux系统上, 与tcp_conn_req_max-q0参数具有相等作用的参数是 tcp_max_syn_backlog ,它可以在/proc/sys/net/ipv4中找到。关于连接队列的更多信息,请看第七章“连接初始化和SYN 泛滥”

你将会也回想要提高TCP的接受和发送缓存。在Solaris系统上,是由tcp_recv_hiwat 和tcp_xmit_hiwat两个变量控制的。你将不得不用一些合理的值进行一些测试,但是我倾向于把tcp_xmit_hiwat提高到48KB(49,152)把tcp_recv_lowat提高到32KB(32,768).为了避免打开TCP窗口缩放比例,你不应该设置这些值超过64,000。Linux网络服务器把他们具有相同作用的值设置到更合适的值时,系统可以得到更高的性能。当然你也可以能根据你的喜好去调整。更多的详细信息,请看第七章“缓存,高水位和窗口”

特殊情形:代理服务器

代理服务器和网络服务器最大的不同就是代理服务器可能具有更多的写操作(因为它们写一些缓存的页面到磁盘)。因此,对于一个代理服务器来说理想的配置应该包括一个去缓存和加速写不易失的硬盘阵列内存。可以通过使用一个分布式的硬盘去把事务写入日志到缓存文件系统得到一个相似的效果。举个例子,如果你正在配置一个快的uniprocessor代理服务器,8个9GB的数据磁盘,我将条带化其中6个硬盘带有64M 交错大小根或者一些别的软件RAID软件。剩下的两个每个将会有一个128M的分区被镜像和被用来存储日志文件。不要把别的除了日志以外的东西放在存贮日志的磁盘上面。从一个服务时间试图可以看出,甚至如果它们有多余的存贮空间和吞吐量, 这些磁盘都是相当的繁忙。

网址:Unix的五条优化的技巧和及时的优化方法 [zt] https://www.yuejiaxmz.com/news/view/566657

相关内容

优化STM32中断响应时间的方法和技巧
灯光系统优化的方法与技巧
优化时间利用的时间管理技巧.docx
优化时间利用和任务处理的实用技巧.docx
性能优化十条策略
OpenCV常见的优化方法和技巧总结
流程优化的五种基本方法
让Linux系统飞速启动:优化启动时间的技巧与方法
优化技巧
Linux启动时间优化技巧

随便看看