如何设计一个公司网站步骤,做文艺文创产品的网站,网站优化 seo和sem,动漫做视频在线观看网站vmstat命令是最常见的Linux/Unix监控工具#xff0c;可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率#xff0c;内存使用#xff0c;虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令#xff0c;一个是Linux/Unix都支持#xff0c;二是… vmstat命令是最常见的Linux/Unix监控工具可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率内存使用虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令一个是Linux/Unix都支持二是相比top我可以看到整个机器的CPU,内存,IO的使用情况而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。 vmstat命令 用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况 vmstat [-a] [-n] [-S unit] [delay [ count]]vmstat [-s] [-n] [-S unit]vmstat [-m] [-n] [delay [ count]]vmstat [-d] [-n] [delay [ count]]vmstat [-p disk partition] [-n] [delay [ count]]vmstat [-f]vmstat [-V] -a显示活跃和非活跃内存 -f显示从系统启动至今的fork数量 。 -m显示slabinfo -n只在开始时显示一次各字段名称。 -s显示内存相关统计信息及多种系统活动数量。 delay刷新时间间隔。如果不指定只显示一条结果。 count刷新次数。如果不指定刷新次数但指定了刷新时间间隔这时刷新次数为无穷。 -d显示磁盘相关统计信息。 -p显示指定磁盘分区统计信息 -S使用指定单位显示。参数有 k 、K 、m 、M 分别代表1000、1024、1000000、1048576字节byte。默认单位为K1024 bytes -V显示vmstat版本信息。 一般vmstat工具的使用是通过两个数字参数来完成的第一个参数是采样的时间间隔数单位是秒第二个参数是采样的次数如: rootubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0 2表示每个两秒采集一次服务器状态1表示只采集一次。 实际上在应用过程中我们会在一段时间内一直监控不想监控直接结束vmstat就行了,例如: rootubuntu:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 00 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 00 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 00 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 01 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0 这表示vmstat每2秒采集数据一直采集直到我结束程序这里采集了5次数据我就结束了程序。 好了命令介绍完毕现在开始实战讲解每个参数的意思。 r 表示运行队列(就是说多少个进程真的分配到CPU)我测试的服务器目前CPU比较空闲没什么程序在跑当这个值超过了CPU数目就会出现CPU瓶颈了。这个也和top的负载有关系一般负载超过了3就比较高超过了5就高超过了10就不正常了服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大表示你的CPU很繁忙一般会造成CPU使用率很高。 b 表示阻塞的进程,这个不多说进程阻塞大家懂的。 swpd 虚拟内存已使用的大小如果大于0表示你的机器物理内存不足了如果不是程序内存泄露的原因那么你该升级内存了或者把耗内存的任务迁移到其他机器。 free 空闲的物理内存的大小我的机器内存总共8G剩余3415M。 buff Linux/Unix系统是用来存储目录里面有什么内容权限等的缓存我本机大概占用300多M cache cache直接用来记忆我们打开的文件,给文件做缓冲我本机大概占用300多M(这里是Linux/Unix的聪明之处把空闲的物理内存的一部分拿来做文件和目录的缓存是为了提高 程序执行的性能当程序使用内存时buffer/cached会很快地被使用。) si 每秒从磁盘读入虚拟内存的大小如果这个值大于0表示物理内存不够用或者内存泄露了要查找耗内存进程解决掉。我的机器内存充裕一切正常。 so 每秒虚拟内存写入磁盘的大小如果这个值大于0同上。 bi 块设备每秒接收的块数量这里的块设备是指系统上所有的磁盘和其他块设备默认块大小是1024byte我本机上没什么IO操作所以一直是0但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s磁盘写入速度差不多140M每秒 bo 块设备每秒发送的块数量例如我们读取文件bo就要大于0。bi和bo一般都要接近0不然就是IO过于频繁需要调整。 in 每秒CPU的中断次数包括时间中断 cs 每秒上下文切换次数例如我们调用系统函数就要进行上下文切换线程的切换也要进程上下文切换这个值要越小越好太大了要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中我们一般做性能测试时会进行几千并发甚至几万并发的测试选择web服务器的进程可以由进程或者线程的峰值一直下调压测直到cs到一个比较小的值这个进程和线程数就是比较合适的值了。系统调用也是每次调用系统函数我们的代码就会进入内核空间导致上下文切换这个是很耗资源也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换导致CPU干正经事的时间少了CPU没有充分利用是不可取的。 us 用户CPU时间我曾经在一个做加密解密很频繁的服务器上可以看到us接近100,r运行队列达到80(机器在做压力测试性能表现不佳)。 sy 系统CPU时间如果太高表示系统调用时间长例如是IO操作频繁。 id 空闲 CPU时间一般来说id us sy 100,一般我认为id是空闲CPU使用率us是用户CPU使用率sy是系统CPU使用率。 wa Wa过高时说明io等待比较严重这可能是由于磁盘大量随机访问造成的也有可能是磁盘的带宽出现瓶颈。 常见问题处理 如果r经常大于4且id经常少于40表示cpu的负荷很重。 如果pipo长期不等于0表示内存不足。 如果disk经常不等于0且在b中的队列大于3表示io性能不好。 1.)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。 2.)如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。 3.)如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。 解决办法: 当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象. 内存问题现象: 内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理. 解决办法: 1.调节applications servers使得对内存和cache的使用更加有效. 2.增加系统的内存. 3. Implement priority paging in s in pre solaris 8 versions by adding line set priority paging1 in /etc/system. Remove this line if upgrading from Solaris 7 to 8 retaining old /etc/system file. 关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。