📄 00000017.htm
字号:
<BR> -------------------------- <BR> <BR> |--- bash-2.03/config-top.h.profile Mon Feb 22 14:37:17 1999 <BR> <BR> |+++ bash-2.03/config-top.h Mon Feb 22 14:37:29 1999 <BR> <BR> -------------------------- <BR> <BR> File to patch: <BR> <BR> 这时你就需要读出patch文件中的目录,然后在正确的目录里面重新执行patch程序。 <BR> <BR> 在patch完成之后,按照我们的一般方法,重新编译源代码,就可以使用新的程序了。 <BR> <BR> 9.9 性能调整 <BR> <BR> 让我们开始关于服务器管理的最后的主要内容。我们在一开始就说过,传统上,Linu <BR>x并不适合作为重负荷服务器。这是因为起源的原因。Linus本人最开始只是将Linux作为 <BR>跑GNU GCC编译器的一个平台。为了具有较高的效能,一开始Linux的发展方向是让系统 <BR>具有较高的进程效率而不是网络性能。但随着Linux的发展,越来越多的人用Linux作为 <BR>他的网络服务器平台,而从2.x开始,Linux内核在处理网络负荷方面已经有了很大的提 <BR>高。不久,2.4的系统内核将会推出(如果一切顺利,在你们看到这本书的时候,2.4内 <BR>核已经可以使用了)。这个系统内核的最大改进是可以支持非常高的硬件配置和更好的 <BR>重负荷性能。同时,在笔者写这本书的时候,用于Linux的集群服务器也已经面世,因此 <BR>,讨论如何用Linux作为中高端的服务器仍然是有意义的。 <BR> <BR> 解决Linux世界中的问题的最终手段往往是从源代码开始。如同我们看到的那样,在L <BR>inux中调整和重新编译内核实际是很简单的事情。而实际上,调整系统内核也确实能够 <BR>解决部分的问题。 <BR> <BR> 在使用下面介绍的内容之前,请记住我不会为这些东西负责。这些内容仅仅是相关文 <BR>档中指出的,我也从没有面对过负担如此沉重以至于需要按照最大服务能力的情况调整 <BR>系统内核的情况。不管怎么说,如果你真的需要试验这些东西,请你首先在一台空载的 <BR>Linux上试验。 <BR> <BR> 9.9.1 性能监视 <BR> <BR> 也许你偶尔会感到系统速度难以想象地缓慢。无论在Linux还是Windows中,这种事情 <BR>都十分正常,因为有太多的东西消耗系统资源。无论如何,检查系统的运行状态是对性 <BR>能进行调整的第一步。 <BR> <BR> 监测系统最主要的工作是检查当前消耗的内存和CPU利用率。检查当前内存的使用状况 <BR>可以用free命令: <BR> <BR> $free <BR> <BR> total used free shared buffers cached <BR> <BR> Mem: 257528 253908 3620 21676 182064 47724 <BR> <BR> -/+ buffers/cache: 24120 233408 <BR> <BR> Swap: 698788 4156 694632 <BR> <BR> 在这个例子中,系统一共具有256MB的物理内存和680MB的交换内存,可能让你感到吃 <BR>惊的是可用的物理内存居然只剩下不到3MB。这是由于Linux把空余的内存都拿来当成磁 <BR>盘缓冲造成的,注意到这一点之后,就会发现现在系统内存几乎是空着的。 <BR> <BR> 一般情况下,可以把buffers看成当前空闲的内存量,这些内存并未真正使用,而仅仅 <BR>是放在磁盘缓冲区中。当然,由于ext2文件系统的性能,你至少也需要以MB计算的buff <BR>ers存在,否则你就会看到系统速度犹如蜗牛一般。尤其是,如果你发现系统开始大量使 <BR>用Swap内存,那么你应该考虑是否需要升级内存了。 <BR> <BR> 同样,可以用uptime命令检查系统的负载: <BR> <BR> $uptime <BR> <BR> 6:39pm up 2 days, 22:40, 1 user, load average: 0.00, 0.00, 0.00 <BR> <BR> 它显示了系统当前已经运行的时间,连接入系统的用户个数,而最重要的是load ave <BR>rage。这个输出数值的含义很难用一两句话说清,而且不同的用户对此也说法不一。按 <BR>照某些文档,这三个数分别是过去一分钟,五分钟和十分钟时间内平均有多少个进程由 <BR>于CPU来不及处理而进入等待。在传统UNIX的管理员手册中,认为在1以下表示系统正常 <BR>,2-3表示系统轻度负载,10以上表示系统已经严重过载。不过,显然对于不同的系统, <BR>过载的标准是不同的。一般来说,我们认为load average不应该大于你的系统的处理器 <BR>数目*2。 <BR> <BR> top命令也是一个显示系统负载的重要命令,它和free+uptime命令一样会显示当前的 <BR>内存分配和load average。然而,top命令会显示详细的多的信息: <BR> <BR> $ top <BR> <BR> 6:50pm up 2 days, 22:51, 1 user, load average: 0.00, 0.00, 0.00 <BR> <BR> 56 processes: 55 sleeping, 1 running, 0 zombie, 0 stopped <BR> <BR> CPU states: 0.0% user, 0.5% system, 0.0% nice, 99.4% idle <BR> <BR> Mem: 257528K av, 254196K used, 3332K free, 21896K shrd, 182124K buff <BR> <BR> Swap: 698788K av, 4156K used, 694632K free 47792K cached <BR> <BR> <BR> PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND <BR> <BR> 5458 root 13 0 1060 1060 856 R 0 0.9 0.4 0:01 top <BR> <BR> 448 root 10 0 104 0 0 SW 0 0.1 0.0 365:46 lpd <BR> <BR> 1 root 0 0 124 72 52 S 0 0.0 0.0 0:17 init <BR> <BR> 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:03 kflushd <BR> <BR> 3 root 0 0 0 0 0 SW 0 0.0 0.0 0:07 kupdate <BR> <BR> 除了给出当前详细的CPU利用率信息之外,还给出了当前占用CPU时间最多的进程的列 <BR>表,显然,在我们的情况下,系统几乎是空闲的。 <BR> <BR> top程序会持续地在前台运行,等待你输入命令,并且每隔5秒钟左右刷新一下服务器 <BR>信息的显示。可以用h命令显示top的命令列表,其中,最重要的命令是杀死一个进程, <BR>例如,我们要杀死lpd守护进程,那么按下k键,将提示: <BR> <BR> PID to kill: <BR> <BR> 要求你输入想要杀死的进程的进程号(pid),输入448,然后会要求你输入发送给进 <BR>程的信号,缺省是15,你也可以使用自己选择的信号: <BR> <BR> Kill PID 448 with signal [15]: <BR> <BR> 直接回车,就给lpd进程发送了一个终止信息,lpd进程将会被杀掉。 <BR> <BR> 监视内存的使用还可以使用vmstat命令,它的语法是vmstat [时间间隔]。例如,下面 <BR>的命令将每隔五秒钟对系统的内存使用做一次统计: <BR> <BR> $vmstat 5 <BR> <BR> procs memory swap io system <BR> cpu <BR> <BR> r b w swpd free buff cache si so bi bo in cs us s <BR>y id <BR> <BR> 0 0 0 4156 3944 181928 47828 0 0 0 1 54 58 8 2 <BR>1 70 <BR> <BR> 0 0 0 4156 3944 181928 47828 0 0 0 0 103 109 0 <BR>0 100 <BR> <BR> ………………………… <BR> <BR> 每一行代表一个采样结果,在procs的栏目里面,给出的是处于运行、睡眠和交换态的 <BR>进程数,内存的项目意义一目了然,io栏目中给出了单位时间内块设备io的数目,syst <BR>em中给出了执行系统调用(in)和上下文切换(cs)的次数,最后的cpu栏目中,us是用户进 <BR>程占用cpu时间的百分比,sy给出系统内核消耗的时间,id是空闲时间。 <BR> <BR> 9.9.2 调整系统参数 <BR> <BR> Linux内核中,包含了一些对于系统运行态的可设置参数。下面简单地介绍一下可能需 <BR>要设置的一些参数。必须记住,除非你有明确的理由,否则确实不需要自己调整它们。 <BR> <BR> 缓冲区刷新频率: <BR> <BR> VFS的缓冲刷新是Linux文件系统高效的重要原因之一,但同时,也增加了文件丢失的 <BR>可能性。如果性能对你真的很重要,你应该考虑调整这个参数。 <BR> <BR> 缓冲刷新的参数可以通过调整/proc/sys/vm/bdflush文件来完成,这个文件的格式是 <BR>这样的: <BR> <BR> $cat /proc/sys/vm/bdflush <BR> <BR> 40 500 64 256 500 3000 500 1884 2 <BR> <BR> 每一栏是一个参数,其中最重要的是前面几个参数。第一个数字是在“dirty”缓冲区 <BR>达到多少的时候强制唤醒bdflush进程刷新硬盘,第二个数字是每次让bdflush进程刷新 <BR>多少个dirty块。所谓dirty块是必须写到磁盘中的缓存块。接下来的参数是每次允许bd <BR>flush将多少个内存块排入空闲的缓冲块列表。其他一些参数的含义可以参考/usr/src/ <BR>linux/Documentation/stsctl/vm.txt的有关部分。 <BR> <BR> 如果你确实认为修改这些数字对你非常重要,那么考虑使用这样的数字来设置: <BR> <BR> echo '100 1200 128 512 15 5000 500 1884 2 '> /proc/sys/vm/bdflush <BR> <BR> 必须记住,这样的设置加大了缓冲区大小,降低了bdflush被启动的频度,同时也增加 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -