本文主要内容:
简单回答:
top、iostat、pidstat、ps、vmstat、netstat、sar等。
能细说一下吗?下面就来好好聊聊这几这个命令。
top命令是Linux下常用的性能分享工具,能够实时显示系统中各个进程的资源占用状况信息。使用top命令输出:
输出信息可以分为两部分:
第一行
第二行
第三行
第四行
第五行
表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
参数说明
在top命令下,按下f键。可以进行列的选择,使用o键可以更改列的显示顺序。
另外一些常见快捷键:
上下箭头:上下滚动查看进程;
注意:使用top命令可以从宏观上观察系统各个进程对CPU的占用情况以及内存使用情况。
top [-][d] [p][q] [c][C] [S][s] [n]
sar命令也是Linux系统中重要的性能监测工具之一,特可以周期性地对内存和CPU进行采样。
下面使用sar命令统计CPU使用情况,每秒钟采样一次,采样五次。
sar [options] []
interval和count分别表示采样周期和采样数量。
options:可以指定sar命令对哪些性能数据进行采样,可能每个系统版本会导致其options不一样,所以建议先试用
sar -h
查看具体参数:
我们来做一个内存使用进行采样:每秒一次,采样五次。
每秒一次,采样五次。
注意:sar命令可以查看I/O信息、内存信息以及CPU情况。
vmstat是一款功能比较齐全的性能监测工具,使用它可以统计CPU、内存、swap使用情况等信息。可以指定采样周期和采样次数。
procs
memory
swap
io
system
CPU
模拟一个线程切换频繁的案例。
代码如下:
写一个controller:
@RestController
@RequestMapping("/thread")
public class ThreadContextSwitchController {
@GetMapping("/test")
public String switchContext(){
HoldLockDemo.test();
try {
Thread.sleep(200000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "ok";
}
}
线程切换部分代码:
import java.util.Random;
public class HoldLockDemo {
public static Object[] lock = new Object[10];
public static Random r = new Random();
static {
for (int i = 0; i < lock.length; i++) {
lock[i] = new Object();
}
}
public static class HoldLockTask implements Runnable {
private int i;
public HoldLockTask(int i) {
this.i = i;
}
@Override
public void run() {
try {
while (true) {
//获取锁
synchronized (lock[i]) {
if (i % 2 == 0) {
System.out.println("wait");
//等待
lock[i].wait(r.nextInt(10));
} else {
System.out.println("notifyAll");
//唤醒所有等待所
lock[i].notifyAll();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void test() {
for (int i =0;i<lock.length;i++){
System.out.println("test method");
new Thread(new HoldLockTask(i/2)).start();
}
}
}
访问:
使用vmstat命令一秒采样一次,采样五次:
可以看到对应cs线程切换的值,us用户CPU的值。
注意:vmstat工具可以查看内存、交互分区、I/O操作、上线文切换、时钟中断已经CPU的使用情况。
iostat可以提供详尽的I/O信息。
基本使用如下:每一秒采样一次,采样五次。
pidstat是一个功能强大的性能检测工具,特也是Systat的组件之一。
pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
通过pidstat -help命令,可以查看到有以下几个常用参数可以监测线程的性能:
PID: 进程pid
使用pidstat命令,还可以监测指定进程的内存使用情况。
下面就使用pidstat工具对进程pid=27180的进程进程内存监控。
每一秒采样一次,采样五次:
输出参数说明:
使用-d选项,我们可以查看进程IO的统计信息:
输出参数说明:
ps命令
ps (Process Status) 。进程状态。使用该命令可以确定有哪些进程正在运行和运行的状态 。ps是显示瞬间进程的状态,并不动态连续,如果想对进程进行实时监控应该用 top 命令。
如果直接使用 ps 命令,会显示所有进程的状态,通常结合 grep 命令查看某进程的状态。(grep 即 global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
ps
结果默认会显示4列信息。
使用man ps可以查看:
输出格式规划:
使用ps -ef 命令查看Linux系统的进程
输出参数说明:
查找mysql进程、java进程、Tomcat进程等。
还可以使用ps aux查看
常见ps操作
使用PS实时监控进程状态
ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。
当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。
watch -n 1 ‘ps -aux --sort -pmem, -pcpu’
如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。
watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’
这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。举个例子,如果你只需要看名为‘root‘用户的信息,你可以使用下面的命令:
watch -n 1 ‘ps -aux -U root u --sort -pmem, -pcpu | head 20’
netstat命令用于显示网络相关信息,例如网络连接信息,路由表信息,端口占用情况等。建议查看:
https://www.thegeekstuff.com/2010/03/netstat-command-examples/
-a 选项用于显示全部连接信息:
列出所有 tcp 端口
netstat -at
netstat -l
netstat -an | grep ':8089'
使用命令可以查看内存、CPU和线程切换等信息。还可以通过命令查看进程信息,以及进程对内存的占用和CPU的使用情况。