博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

linux服务器检测工具

Posted on 2015-01-13 10:03  bw_0927  阅读(381)  评论(0)    收藏  举报

gcore  动态产生core文件

1、uptime
uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。
uptime的输出包含一项内容是load average,显示了最近1-,5-,15分钟的负荷情况。它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,load average值会升高;反之则会降低。
load average的最佳值是1,说明每个进程都可以马上处理并且没有CPU cycles被丢失。对于单CPU的机器,1或者2是可以接受的值;对于多路CPU的机器,load average值可能在8到10之间。

也可以使用uptime命令来判断网络性能。例如,某个网络应用性能很低,通过运行uptime查看服务器的负荷是否很高,如果不是,那么问题应该是网络方面造成的。

下边是uptime的输出样式


2、dmesg
dmesg命令主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。
另外,使用dmesg可以确定您的服务器安装了那些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。

4、iostat
iostat由Red Hat Enterprise Linux AS发布。同时iostat也是Sysstat的一部分,可以下载到,网址是http://perso.wanadoo.fr/sebastien.godard/
执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分:CPU使用情况和磁盘使用情况。

下边是iostat的输出样式

CPU占用情况包括四块内容
%user:显示user level (applications)时,CPU的占用情况。
%nice:显示user level在nice priority时,CPU的占用情况。
%sys:显示system level (kernel)时,CPU的占用情况。
%idle: 显示CPU空闲时间所占比例。

磁盘使用报告分成以下几个部分:
Device: 块设备的名字
tps: 该设备每秒I/O传输的次数。多个I/O请求可以组合为一个,每个I/O请求传输的字节数不同,因此可以将多个I/O请求合并为一个。
Blk_read/s, Blk_wrtn/s: 表示从该设备每秒读写的数据块数量。块的大小可以不同,如1024, 2048 或 4048字节,这取决于partition的大小。

例如,执行下列命令获得设备/dev/sda1 的数据块大小:

dumpe2fs -h /dev/sda1 |grep -F "Block size"

输出结果如下

dumpe2fs 1.34 (25-Jul-2003)
Block size: 1024

Blk_read, Blk_wrtn: 指示自从系统启动之后数据块读/写的合计数。

 

10 pmap
pmap可以报告某个或多个进程的内存使用情况。使用pmap判断主机中哪个进程因占用过多内存导致内存瓶颈。图14-9显示了SUSE LINUX
Enterprise Server下pmap命令执行结果

pmap -x <pid>


图14-10显示了smbd进程所占用的内存

  • pstree   找到线程后strace
  • size  查看文件内存分布
  • top -p pid  然后H,显示线程   按1显示cpu
    • 输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题);
    • 输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题;

11 strace
strace截取和记录系统进程调用,以及进程收到的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。
使用该命令需要指明进程的ID(PID),例如:
strace -p <pid>

 

12. pstack

 13. lsof

14.truss

 

truss和strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序,包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具;

 

=========

 

(六)编译器和调试器

 

“工欲善其事,必先利其器”。编译器负责把源代码生成可执行文件,而调试器则是在程序出现bug时,用来“降妖除魔”的不二神器。我会以我最熟悉的gcc和gdb为例子,来谈一下个人体会。

 

gcc有很多编译选项,除了要熟悉像-O,-g这些最基本的选项,我建议大家可以多了解一些其它不常见的选项。因为这些选项很可能帮助我们找到程序的一些bug。举个例子,在比较新的gcc版本里,增加了-fstack-protector这个选项,而它可以帮助我们检查到缓冲区溢出这种bug。此外,你还可能碰到这种情况,一个bug总是发生在程序优化后的版本,而不会出现在没经过优化的版本。所以,多了解你的编译器,你就可以更好地了解你的程序是如何生成的。

 

一个程序员不可能不碰到bug,而这个时候,调试器就是最好的工具。可以说,在遇到bug时调试技巧和手段是否丰富是衡量一个程序员的能力和水平的重要参考。除此以外,gdb另一个重要用途就是分析程序的core dump文件。我个人很喜欢看破案和推理的电视节目。我觉得程序的core dump文件可以比作“犯罪现场”,而gdb就是公安人员用来在现场提取线索的工具。对gdb越熟悉,就越能从core dump文件提取有价值的信息,也就越有助于我们定位到程序bug的“root cause”。

 

(七)DTrace/SystemTap

 ========================

7. ipcs 查询进程间通信状态

ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。

7.3. 修改IPC系统参数

以linux系统为例,在root用户下修改/etc/sysctl.conf 文件,保存后使用sysctl -p生效:

  • http://linuxtools-rst.readthedocs.org/zh_CN/latest/tool/sar.html
  • free
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

  • sar  可查看系统历史性能

sar -r  历史内存使用情况

  • 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
  • 怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
  • 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

     

  • sar -P ALL 2 3  每两秒钟输出一次所有CPU使用的情况,总共输出3次
  • 12.7. sar参数说明

    • -A 汇总所有的报告
    • -a 报告文件读写使用情况
    • -B 报告附加的缓存的使用情况
    • -b 报告缓存的使用情况
    • -c 报告系统调用的使用情况
    • -d 报告磁盘的使用情况
    • -g 报告串口的使用情况
    • -h 报告关于buffer使用的统计数据
    • -m 报告IPC消息队列和信号量的使用情况
    • -n 报告命名cache的使用情况
    • -p 报告调页活动的使用情况
    • -q 报告运行队列和交换队列的平均长度
    • -R 报告进程的活动情况
    • -r 报告没有使用的内存页面和硬盘块
    • -u 报告CPU的利用率
    • -v 报告进程、i节点、文件和锁表状态
    • -w 报告系统交换活动状况
    • -y 报告TTY设备活动状况

    sar -f /var/log/sa/sa15 -r    查看历史记录

    sar -n DEV 2          //每两秒打印一次网络吞吐量

    -n { keyword [,...] | ALL }
    Report network statistics.

    Possible keywords are DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6.

    With the DEV keyword, statistics from the network devices are reported.

     

    ==============虚拟内存/swap

    1. [user@host ~]$ sar -S 

    内存使用情况提示:服务器内存占用量较高的情况其实非常正常。这是因为内存的读写速度及效率远高于服务器磁盘,因此操作系统倾向于将内存作为缓冲机制预先载入数据,从而提高数据读取速度。

    同样,内存使用百分比也并不是什么大问题(除非大家没有设置虚拟内存分区,但这也与内存本身无关)。大家真正需要关注的是虚拟内存使用百分比,因为 只有在服务器的物理内存被全部占用后、虚拟内存才会接替而上发挥作用。这一数字越低,就说明服务器的运行状态越好。如果虚拟内存使用率为0%,则意味着我 们的服务器能够完全利用物理内存执行任务