对于系统级的监控来说,top命令是实用而高效的瑞士军刀。相比vmstat,sar来说提供的是实时的进程信息,对于监控性能,排查问题是很高效的。而且提供了交互式的命令模式,能够灵活的对输出结果进行组合。
如果数据库系统中存在着cpu或者内存的过度使用,或者说IO等待较高,都可以通过top命令进行一个快速的定位到系统进程信息,然后从系统级和数据库级的进程进行一个映射,从而得到数据库级的进程信息,定位可能存在的问题。
top命令是个人比较喜好的一个命令,大体的总结了下,有一些比较实用的功能。
首先简单解释下top命令的一些内容。
第1行显示了系统级的负载,平均负载有3个输出,分别代表在过去的1分钟,5分钟,15分钟时的平均负载,可以看到当前这个系统是没有任何压力的。这部分的输出和命令uptime是一致的。
第2行显示了关于进程的一些大体信息,当前的进程总数,哪些进程是运行状态,哪些睡眠,等待状态等。可以看到进程27758是运行状态的,因为标亮的进程列表中如果"S"对应的值为R代表running,如果为S则为sleeping.
第3行显示了cpu的一些负载信息,这个也是top命令的比较实用的一个功能。特别是%id和%wa这两个指标尤为重要,很多的性能问题中,如果%id过低,%wa也很低,说明cpu使用率很高,可能有一些sql语句消耗了大量的cpu资源,如果%wa很高的话,很可能是系统IO出现了问题。在以往的系统升级中,如果发现%wa过于10%,就说明IO等待很高了,可以通过dd等方式做一个简单的测试。
第4行显示了内存的一些使用情况。如果内存使用情况存在明显的异常,可以通过标亮的进程信息中查找%MEM消耗比较高的进程。
第5行显示了交换区的一些情况,如果内存足够或者系统负载不高,这个部分的数据没有什么大的变化。
-B 选项
输入top,然后在屏幕中直接输入B,就会打开或者关闭表中重要数字的加粗显示,如果你仔细比较会发现确实有一些数据是做了加粗的显示,这样也更方便你对问题进行排查。
-C 选项
直接输入top -c或者(输入top,然后在屏幕中直接输入c)会切换显示进程的命令名或者是完成的命令行输入信息。
进程28751就可以看到进程对应的命令行输入信息
-o选项
如果你想定制显示top命令的输出顺序,比如默认是按照pid,user的顺序来显示进程信息的,如果你想根据user,pid来显示,可以使用c选项
输入top,然后在显示屏幕上输入o,就会弹出一个交互界面。我想先显示列USER,就输入E,然后回车,结果就进行了重排。
修改后显示的列的顺序就相应的进行了调整。
-<,>选项
top命令的输出还是比较多的,可以使用<或者>来进行灵活的翻页,毕竟进程数很多,有些进程信息在一个屏幕里还显示不到,可以前后翻页来查看。
输入top,然后直接在屏幕中输入<或者>就可以分页的显示出进程的信息了。
-F或者O选项
可以根据需要对某个列进行排序,默认是对%CPU进行排序
输入top,然后在输出屏幕上输入F或者O,选择相应的列进行排序即可,比如我们对PPID进行排序。
输出结果如下,对于一些可能由递归调用中问题可以使用这个方法进行排查。
-i选项
这个选项对于一些性能问题的排查是如虎添翼,比如我们只是看看哪些进程在运行状态,不需要看到哪些睡眠状态的,可以使用-i选项。
输入top -i或者输入top,然后在屏幕中直接输入i,就会显示出正在那些运行中的进程。
-z选项
如果想显示的结果能够更加清晰,可以使用-z选项切换彩色模式或者单色模式
输入top然后在屏幕总输入i就会显示出比较清晰的进程信息,可以根据自己的需要来决定是否启用。
-u选项
如果你只是想查看某个用户的进程信息,可以使用u选项。
输出结果就比较清晰,只是显示ora11g的进程。
-d或者s选项
因为top命令的输出是动态的,会平均每3秒进行一次刷新,如果想调节刷新的频率,可以使用d或者s选项。
输入top,然后再输入d或者s,自行设定刷新频率即可。