一、vim命令
不要使用vim打开大文件,vim会一次性读取所有内容到内存,容易造成宿主机内存溢出。 打开文件前,可以使用du -h命令查看文件大小。一般,100MB以下为宜。
1、普通模式
j 向下
30j 向下移动30行
k 向上
h 向左
l 向右
0 到行首
^ 到行首第一个字符,如果前面有空格的话
$ 到行尾
gg 快速到文件头
G 快速到文件尾
100G 跳转到第100行
2、命令模式
在普通模式下,输入:即可进入。
在命令模式下输入:
:set nu 显示行号
:set nonu 不显示行号
3、查找字符串
在普通模式下,按下/直接进入查找,输入相应的字符串按确定即可。
n 查找下一个匹配
N 查找上一个匹配
2n 查找下面第二个匹配
二、firewall-cmd命令
1、开放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent # 开放8888端口,永久增加:reload后生效
firewall-cmd --zone=public --remove-port=8888/tcp --permanent #关闭8888端口
firewall-cmd --reload # 更新防火墙规则,配置立即生效
查看防火墙:
firewall-cmd --list-all
2、查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
3、关闭防火墙
如果不想管控端口,直接关闭系统防火墙,啥都能通,但安全性不强,不建议。
systemctl stop firewalld.servic
4、查看防火墙状态
firewall-cmd --state
5、查看监听的端口
netstat -lnpt
PS:centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
6、检查端口被哪个进程占用
netstat -lnpt |grep 8888
7、查看进程的详细信息
ps 8888
8、中止进程
# kill -9 [进程号] ,例如
kill -9 6832
三、rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
命令格式:rm [选项] 文件
常用参数
-f, --force 忽略不存在的文件,从不给出提示。
-i, --interactive 进行交互式删除
-r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
-v, --verbose 详细显示进行的步骤
--help 显示此帮助信息并退出
--version 输出版本信息并退出
使用实例
1.删除文件 test.txt,系统会提示是否删除。
rm test.txt
2.强制删除 test.txt,系统不再提示。
rm -f test.txt
3.将 test 子目录及目录中所有档案删除。
rm -r test
四、top分析性能(整机)
常用的分析性能的工具,能够实时监控系统中各个进程资源占用的情况,这和windows中任务管理器有点类似。
系统时间:17:15:47
运行时间:118 days, 22 min,
当前登录用户: 4 users,
负载均衡(uptime):load average: 0.09, 0.10, 0.03
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
按1键:
按进程的CPU使用率排序:运行top命令后,按键大写P
按进程的内存使用率排序:运行top命令后,键入大写M
uptime系统性能命令的精简版
五、cpu查看vmstat(CPU)
vmstat -n 2 3
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数单位是秒,第二个参数是采样的次数。
procs
r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列 不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大。
b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等。
cpu
us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序。
sy:内核进程消耗CPU时间百分比。
us+sy参考值为80%,如果us+sy大于80%,说明可能存在CPU不足。
id:处于空闲的CPU百分比。
wa:系统等待IO的CPU时间百分比。
st:来自于一共虚拟机偷取的CPU时间百分比。
mpstat -P ALL 2
mpstat [-P {|ALL}] [internal [count]]
参数 解释
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间、
count 采样的次数,count只能和delay一起使用,当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。
六、cpu查看pidstat
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
常用的参数:
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
pidstat -u 1 -p 2656416 // 2656416进程每一秒打印一次打印出详细情况
七、内存查看free(内存)和pidstat
free [-b-k-m] [-o] [-s delay] [-t] [-V]
free命令用来显示内存的使用情况,使用权限是所有用户。
经验值
应用程序可用内存/系统物理内存>70%内存充足
应用程序可用内存/系统物理内存<20%内存不足,需要增加内存
20%<应用程序可用内存/系统物理内存<70%内存基本够用
pidstat -p 进程号 -r 采样间隔秒数查看内存使用情况
pidstat -p 2656416 -r 2
八、df 列出文件系统的整体磁盘使用量
df命令是用来查看linux系统服务器文件系统的磁盘使用情况。可以用该命令来查看已经使用了多少空间,还有多少空间可用。
选项可以有:
-a:全部文件系统列表,包含虚拟文件系统
-B:指定显示scale size,比如以M,G为单位显示
-h:方便人阅读方式显示。
-H:和-h相似,不过其中1k = 1000byte, 1M=1000k
-i:列出inode的信息
-k :区块为1024字节
-l :显示本地文件系统
-p:使用POSIX规范输出
-t:打印指定的文件系统类型
-T:显示文件系统类型
-x:不打印指定的文件系统类型
Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
Used:表示用掉的磁盘空间大小;
Available:表示剩余的磁盘空间大小;
Use%:磁盘空间使用率;
Mounted on:文件系统的挂载点,也就是磁盘挂载的目录位置
查询当前目录下所有文件的大小:du -sh *
[root@localhost nginx-1.12.2]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@localhost nginx-1.12.2]# du -sh *
388K auto
272K CHANGES
416K CHANGES.ru
40K conf
4.0K configure
148K contrib
8.0K html
4.0K LICENSE
4.0K Makefile
8.0K man
12M objs
4.0K README
5.3M src
[root@localhost nginx-1.12.2]#
九、磁盘IO查看iostat和pidstat
iostat 是 I/O statistics(输入/输出统计)的缩写。
iostat 命令主要用于对系统的磁盘操作活动进行监视,包括 读写次数与读写的数据量、I/O 请求的服务时间与等待时间 等。同时,iostat 命令还可用于 考察 CPU 的利用率,考察 NFS 网络文件系统的处理活动 等。
iostat [参数] [时间] [次数]
命令参数
参数 |
解释 |
|
-c |
显示 CPU 使用情况的分类统计数据。 |
|
-d |
显示设备使用情况的分类统计数据。 |
|
-h |
按照易读的适当单位显示 -n 选项提供的 NFS 统计数据。 |
|
-k |
以 KB/s(而非默认的每秒数据块)为单位显示统计数据。 |
|
-m |
以 MB/s 为单位显示统计数据。 |
|
-n |
显示 NFS 统计数据。 |
|
-N |
用于显示 LVM2 逻辑卷的统计数据。 |
|
`-p[devices |
ALL]` |
显示指定块设备及其所有分区的统计数据。如果在命令行中指定了设备名,显示指定设备及其所有分区的统计数据。关键字 ALL 表示显示所有块设备及其所有分区(包括未用分区)的统计数据。 |
-t |
在显示的统计数据中增加时间信息(时间的显示格式依赖于 S_TIME_FORMAT 环境变量的设置)。 |
|
-V |
显示命令的版本与版权信息,然后退出。 |
|
-x |
显示附加的统计信息。 |
|
-z |
禁止输出数据采样期间没有 I/O 活动的任何设备。 |
iostat -xdk 2 3
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
pidstat [ 选项 ][<时间间隔>][<次数>]
常用的参数:
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T{TASK|CHILD|ALL}
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
pidstat -d 采样间隔秒数 -p 进程号
pidstat -d 2 -p 2656416
十、ifstat(网络IO)
ifstat 命令用于统计网络接口流量状态,能比较简单看网络流量。ifstat 可以整齐地打印出网络接口统计信息,还可以用来禁用指定的网络接口。
语法格式
ifstat [OPTIONS]
选项说明
-a #监测能检测到的所有网络接口的状态信息
-z #隐藏流量是无的接口
-h #显示帮助信息
-j #用JSON格式输出信息
-n #关闭显示周期性出现的头部信息
-t #在每一行的开头加一个时间戳
-T #报告所有监测接口的全部带宽
-w #用指定的列宽
-W #如果内容比终端窗口的宽度还要宽就自动换行
-S #在同一行保持状态更新(不滚动不换行)
-q #安静模式
-v #显示版本信息
-d #指定一个驱动来收集状态信息
十一、CPU占用过高的定位分析思路
结合Linux和JDK命令一块分析。
案例步骤:
1、先用top命令找出CPU占比最高的
2、ps -ef或者jps进一步定位,得知是怎么样的一个后台程序
jps -l 查询java程序 或者ps -ef | grep java | grep -v grep
jps(Java Virtual Machine Process Status Tool)是JDK提供的一个显示当前所有java进程pid的命令,简单实用。
命令格式:jps [options ] [ hostid ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
grep -v grep 在文档中过滤掉包含有grep字符的行 ,避免影响最终数据的正确性 。
3、定位到具体线程或者代码
ps -mp 进程ID -o THREAD,tid,time
-m 显示所有的线程
-p pid进程使用cpu的时间
-o 该参数后是用户自定义的格式
ps -mp 2656416 -o THREAD,tid,time文章来源:https://www.toymoban.com/news/detail-772602.html
4、将需要的线程ID转换为16进制格式(英文小写)
printf "%x\n" 线程ID
5、jstack 进程ID | grep tid(16进制线ID英文小写) -A60
jstack 进程ID打印报告
jstack 2656417 | grep 2888a1 -A60文章来源地址https://www.toymoban.com/news/detail-772602.html
到了这里,关于Linux命令及CPU占用过高的定位分析思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!