监控系统的运行状态,并且可以按照cpu、内存、执行时间进行排序。
?
第一行中,03:30:22是当前时间,up 39 min是系统运行的运行了多长时间,1 user指出了当前有几个用户登录到系统,load average指的是系统负载,这后面的三个值分别是1分钟,5分钟,15分钟的系统负载平均值。
如果仅仅需要第一行中的信息,可以使用uptime命令。
第二行中,Task指出了当前系统有多少个进程,以及各种状态的进程统计信息。
第三行是%Cpu(s),代表了CPU占用比例,其中:
ni是优先值(nice value),也就是任务的优先值。优先值为负数linux命令,则说明任务有更高的优先级,正数值说明任务有更低的优先级,该值为0意味着进程的优先级没有调整。
最后两行为内存信息,前者Mem为物理内存占用信息,后者Swap为交换分区占用信息。
开启线程需要占用一定的内存空间(默认情况下,主线程占用1m,子线程占用512kb),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。每开一个线程都会造成系统额外的负担,开启线程需要占用一定的内存空间(默认情况下,每一条线程都会占用 512kb),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。jstat –gccapacity :可以显示,vm内存中三代(young,old,perm)对象的使用和占用大小,如:pgcmn显示的是最小perm的内存使用量,pgcmx显示的是perm的内存最大使用量,pgc是当前新生成的perm内存占用量,pc是但前perm内存占用量。
最下面是进程的信息区域:
参考linux top命令详解
根据名称或者其它属性查询(发送信号)进程信息。
pgrep命令根据提供的条件查询进程的pid,查询条件是and方式的,对于同一个选项,使用『,』分隔可以按照or方式查询。
pgrep -u root sshd # 查询进程名为sshd,并且属主是root的进程 pgrep -u root,daemon # 查询属主是root或者daemon的进程
pkill 使用与pgrep类似,不过它不是用来查询进程pid,而是给进程发送信号,默认会发送 SIGTERM信号。
例如:
$ pgrep -u root named # 查找named进程的pid $ pkill -HUP syslogd # 告诉syslogd重新读取配置文件
要查看有哪些信号可用,可以使用kill -l列出所有的信号以及其数值。
#!/usr/bin/expect set timeout 20 set ip "IP地址" set user "用户名" set password "密码" spawn ssh "$user\@$ip" expect "$user@$ip's password:" send "$password\r" interact
参考 6 Expect Script Examples to Expect the Unexpected (With Hello World)
pstack是一个shell脚本,用于打印正在运行的进程的栈跟踪信息,它实际上是gstack的一个链接。
该命令只需要提供一个参数,进程的pid即可。
$ sudo pstack $(pgrep -uroot php-fpm) [sudo] password for guanyy: #0 0x000000380d8e86f3 in __epoll_wait_nocancel () from /lib64/libc.so.6 #1 0x00000000007ec4a4 in fpm_event_epoll_wait () #2 0x00000000007e1517 in fpm_event_loop () #3 0x00000000007dc887 in fpm_run () #4 0x00000000007e3bd8 in main ()