1、查看内存占用、cpu占用–top命令
top - 12:51:51 up 445 days, 15:23, 0 users, load average: 9.52, 8.74, 8.20
Tasks: 33 total, 1 running, 32 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.5 us, 3.4 sy, 3.1 ni, 86.3 id, 0.1 wa, 0.2 hi, 0.3 si, 0.0 st
KiB Mem : 25585168+total, 23169940 free, 13385299+used, 98828736 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 12008969+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
850160 root 20 0 18.985g 362072 22248 S 231.3 0.1 0:11.96 java
67593 root 20 0 41.261g 598536 18364 S 3.3 0.2 261:39.98 node
731887 root 20 0 15.362g 1.389g 3088 S 1.7 0.6 42:44.79 qemu-system-aar
73 root 20 0 6279812 5.051g 11468 S 1.0 2.1 41:22.82 node
1 root 20 0 18384 276 0 S 0.0 0.0 0:00.19 start_docker.sh
8 root 20 0 61608 936 456 S 0.0 0.0 0:00.00 sudo
10 root 20 0 718356 24536 5180 S 0.0 0.0 0:00.60 node
这是top命令的输出解释:
-
系统信息行(第一行):
top - 12:51:51 up 445 days, 15:23, 0 users
: 显示当前时间(12:51:51),系统已运行时间(445天15小时23分钟),以及当前没有用户登录。load average: 9.52, 8.74, 8.20
: 系统负载平均值,分别代表过去1分钟、5分钟和15分钟的负载情况。这些数字表示系统正在处理的进程数目,越高表示负载越重。
-
任务信息行(第二行):
Tasks: 33 total, 1 running, 32 sleeping, 0 stopped, 0 zombie
: 显示当前任务的统计信息,包括总任务数(33个)、正在运行的任务数(1个)、睡眠中的任务数(32个),以及已停止(stopped)和僵尸(zombie)状态的任务数。
-
CPU使用情况行(第三行):
-
%Cpu(s): 6.5 us, 3.4 sy, 3.1 ni, 86.3 id, 0.1 wa, 0.2 hi, 0.3 si, 0.0 st
: 显示CPU的使用率信息,具体含义如下:
us
(User CPU time):用户空间程序占用CPU的时间比例。sy
(System CPU time):内核空间程序占用CPU的时间比例。ni
(Nice CPU time):调整过优先级的任务占用CPU的时间比例。id
(Idle CPU time):CPU空闲时间比例。wa
(IO wait CPU time):CPU等待IO完成的时间比例。hi
(Hardware IRQ):硬中断(hardware interrupt)时间比例。si
(Software IRQ):软中断(software interrupt)时间比例。st
(Steal time):被虚拟化环境偷取的时间比例。
-
-
内存使用情况行(第四行):
-
KiB Mem : 25585168+total, 23169940 free, 13385299+used, 98828736 buff/cache
: 显示内存使用情况的详细信息:
total
:总内存量。free
:空闲内存量。used
:已使用的内存量。buff/cache
:用作缓冲区和缓存的内存量。
-
-
交换空间使用情况行(第五行):
KiB Swap: 0 total, 0 free, 0 used. 12008969+avail Mem
: 显示交换空间(swap)使用情况,这里交换空间未被使用。
-
进程列表:
850160 root 20 0 18.985g 362072 22248 S 231.3 0.1 0:11.96 java
:显示了一个Java进程,占用了231.3%的CPU,使用了362072 KiB的物理内存。
当使用 top
命令查看系统进程时,输出的每一列代表以下内容:
- PID: 进程ID,是操作系统分配给每个进程的唯一标识符。
- USER: 启动进程的用户名。
- PR: 进程的调度优先级 (Priority),数值越低优先级越高。
- NI: 进程的nice值,nice值用于调整进程的优先级,数值越高优先级越低。
- VIRT: 进程占用的虚拟内存大小 (Virtual Memory),包括进程使用的库、代码和数据。
- RES: 进程占用的物理内存大小 (Resident Set Size),即实际占用的RAM大小。
- SHR: 进程使用的共享内存大小。
- S: 进程的状态,通常包括:
- S: Sleeping (休眠状态)
- R: Running (运行状态)
- D: Disk sleep (磁盘休眠,进程正在等待I/O完成)
- Z: Zombie (僵尸状态,进程已经终止,但父进程尚未收到退出状态)
- T: Stopped (停止状态)
- %CPU: 进程占用CPU的百分比。
- %MEM: 进程占用内存的百分比。
- TIME+: 进程启动后占用CPU的累计时间。
- COMMAND: 启动进程的命令行。
根据你提供的示例输出:
- PID: 850160
- USER: root
- PR: 20
- NI: 0
- VIRT: 18.985g (虚拟内存约18.985 GB)
- RES: 362072 (物理内存约362072 KB,即约353 MB)
- SHR: 22248 (共享内存约22248 KB)
- S: S (进程状态为运行状态)
- %CPU: 231.3% (占用CPU的百分比为231.3%)
- %MEM: 0.1% (占用内存的百分比为0.1%)
- TIME+: 0:11.96 (累计占用CPU时间为11.96秒)
- COMMAND: java (启动该进程的命令为java)
这些信息帮助系统管理员了解每个进程在系统资源(如CPU和内存)方面的使用情况,以便及时调整和优化系统性能。
关于进程的%cpu > 100
在
top
命令中,如果某个进程的%CPU
大于100%,通常有以下几种可能的解释:
- 多核CPU影响: 当系统有多核CPU时,一个进程的总 CPU 使用率可能会超过100%。例如,如果一个进程在一个四核系统上占用了400%的CPU,这意味着它完全利用了四个核心的各自25%。
- 超线程或多线程: 如果系统支持超线程或多线程技术,一个进程可以同时在多个逻辑CPU核心上运行。因此,一个进程的总 CPU 使用率可能会超过物理CPU核心数量的限制。
- 测量时间间隔内的瞬时性:
top
命令默认每隔几秒钟刷新一次数据,然后计算CPU使用率。如果在测量时间间隔内,一个进程的CPU使用率非常高,可能会导致显示的%CPU
超过100%。- 统计和显示问题: 有时候
top
命令的统计数据可能存在误差或显示问题,尤其是在处理瞬时高负载时。这可能导致某些进程的%CPU
显示异常。通常情况下,如果一个进程的
%CPU
超过100%,特别是在多核或多线程系统中,这是正常现象。这种情况下,top
会将所有核心的使用情况累加到一个进程的%CPU
中,以反映该进程在整个系统中所占用的CPU资源。
2、查看进程–ps命令
命令参数
-e
:显示所有进程。-f
:全格式显示。-l
:长格式显示。-a
:显示终端上的所有进程,包括其他用户的进程。-u
:显示进程的详细状态。-x
:显示没有控制终端的进程。-T
:显示当前线程的层次结构。
直接用:
ps -efxl
输出
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 18880 3676 - Ss+ pts/0 0:00 /bin/bash /docker_start.sh PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=205ffce4e153 TERM=xterm NE_RUN_OPTION=all SNAP_VERSION=vm-20240807020223 WECODE_ONLINE=Fa
- USER: 进程的拥有者。这通常是运行该进程的用户帐户的名称。
- PID: 进程ID。每个进程都有一个唯一的ID,用于标识该进程。
- %CPU: 该进程占用的CPU使用率百分比。
- %MEM: 该进程占用的物理内存使用率百分比。
- VSZ: 虚拟内存大小,单位是KB。这表示进程使用的虚拟内存量。
- RSS: 常驻集大小,单位是KB。这表示进程在物理内存中占用的固定大小。
- TTY: 终端类型。如果进程没有与任何终端关联,则显示为"?"。
- STAT: 进程状态。这描述了进程的当前状态,例如运行中、休眠等。
- START: 进程启动的时间。
- TIME: 该进程实际使用CPU的时间,单位是小时:分钟:秒。
- COMMAND: 启动进程的命令名称或命令行。
3、查看磁盘占用情况–df命令
直接用
df -ha
4、查找文件–find命令
find命令格式:
find path -option
path:要查找的目录路径。
最常用的就是
find dstPath -name "XXX.cpp"
options :表示查找方式
options常用的有下选项:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录
5、查看网络连接–netstat命令和ss命令
常见选项
-t,tcp
-u,udp
-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-n, --numeric don't resolve names
-p,对应进程
-r # 查看路由表
命令输出:
netstat -alntup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN 160/zebra
tcp 0 0 127.0.0.1:2605 0.0.0.0:* LISTEN 165/bgpd -
tcp6 0 0 :::179 :::* LISTEN 165/bgpd
tcp6 0 0 :::22 :::* LISTEN 71/sshd
udp 0 0 0.0.0.0:4789 0.0.0.0:* -
udp 0 0 0.0.0.0:8888 0.0.0.0:* 2282/qemu-system-aa
ss命令常见选项和用法和netstat一样
6、查看进程打开的文件监听的端口–lsof命令
命令 lsof ( list opened files )负责列出系统中已经打开的文件,包括普通文件,目录,块特殊文件,字符特殊文件,正在执行的文本引用,库,流或网络文件(例如:网络套接字,NFS文件或UNIX域套接字)。
常见选项:
-p pid : 输出指定进程打开的文件;
-i:port
查看监听22端口的:
lsof -i:22
7、抓包–tcpdump
tcpdump option proto direction type
- option:-i 指定网卡,-w filename(写入文件),-r filename (解析文件)
- proto:tcp、ip、udp、 icmp
- direction:dst、src
- type:net、host、port
例子:
tcpdump -i eth0 src port 22 or dst port 22
参考:全网最详细的 tcpdump 使用指南 - 王一白 - 博客园 (cnblogs.com)
8、测试程序运行时间–time命令
time + 可执行文件
time + shell命令
time
命令用于测量程序运行所花费的时间,包括用户CPU时间、系统CPU时间以及实际时间。当你在命令行中运行 time
命令来执行一个程序时,它会输出三个值:
- 实际时间(real):从命令开始执行到命令结束的总时间,单位为秒。这个时间包括了整个命令执行的时间,包括CPU执行时间、IO等待时间等。
- 用户CPU时间(user):程序在用户态运行所花费的CPU时间,即程序执行自身代码的时间总和。在多核处理器上并行执行的时间总和也会计入。
- 系统CPU时间(sys):程序在内核态运行所花费的CPU时间,即执行系统调用的时间总和。
这三个时间通常在 time
命令的输出中以如下格式显示:
time ls
.......
real 0m1.234s
user 0m0.123s
sys 0m0.456s
real
表示实际时间,单位为分钟(m)和秒(s)。user
表示用户CPU时间,同样以分钟和秒为单位。sys
表示系统CPU时间,同样以分钟和秒为单位。
9、统计文本信息–wc命令
wc -w file # 统计单词数
wc -l file # 统计行数
10、文本处理命令–awk命令
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
语法:注意要有单引号
awk options 'pattern {action}' file
选项参数说明:
options
:是一些选项,用于控制awk
的行为。-F <分隔符>
: 指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。pattern
:是用于匹配输入数据的模式。如果省略,则awk
将对所有行进行操作。{action}
:是在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行。
例子:以":"为分隔符,对每行进行分割,打印第一和第二项’{print $1 $2}’
awk -F':' '{print $1 $2}' start-71.sh
11、文本匹配(正则表达式)–grep命令
grep 命令是一项非常有用的工具。grep(全称:Global Regular Expression Print)命令用于根据给定的正则表达式搜索文本,并将匹配的行打印出来。
正则表达式匹配符
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
+ # 匹配1个或多个先前字符
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
(..) # 标记匹配字符,如'(love)',love被标记为1。
< # 锚定单词的开始,如:'<grep'匹配包含以grep开头的单词的行。
> # 锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。
x{m} # 重复字符x,m次,如:'0{5}'匹配包含5个o的行。
x{m,} # 重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。
x{m,n} # 重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。