Linux常用命令总结
常用命令
服务器ip、端口连通情况
- ping
ping出域名对应的服务器ip - telnet
telnet ip port - nc -vz -w2 ip port
mac测试远程端口是否正常,netcat
文件操作
find
linux下面根据文件名,查找文件路径:
1 | find / -name 具体目录名 -print |
linux性能监控命令
top
可以实时显示系统中各个进程的占用情况。
上部分列出了系统整体的统计信息:任务、CPU、内存、交换区等信息。
下部分列出进程的详细情况。
1 | 参数说明: |
uptime
可以查看系统负载。显示的和top命令第一行一样。
ps
查看所有进程
- grep
全局正则表达式文本 - ps -ef
用标准格式显示进程 - ps aux
用BSD格式来显示进程 - ps -T -p [进程id]
查看进程下的线程
netstat
这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:
vmstat
可以用来监控虚拟内存。可对操作系统的虚拟内存、IO、CPU等多个指标的整体情况进行监视。
内存方面:
swpd:已经使用的交换内存(kb)
free:空闲的物理内存(kb)
buff:用作缓冲区的内存数(kb)
cache:用作高速缓存的内存数(kb)
si、so 两列,表示磁盘和内存之间交换的频繁程度。分析思路:
如果 si、so 数值长期很大并且free长期很小,表示物理内存不能满足需要,也就是内存不足。由于磁盘的性能比内存是慢很多的,所以如果存在大量的页面交换,那么系统的性能必然会受到很大影响。CPU方面:
r:展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
us:用户CPU时间。
sy:系统CPU时间。
id:空闲CPU时间。
wa:等等I/O CPU时间。
us+sy+id+wa=100%分析思路:
如果 r 经常大于4,且id经常小于40,表面CPU的负荷很重。
pidstat
pidstat,观测单个进程的性能情况
free
可以用来观察内存使用情况。
total= used + free
分析思路:
当 –/+ buffers/cache中的free长时间接近0,且 swap used长时间比较大时,说明物理内存已经不够用了,需要升级内存或降低内存的使用量。
iostat
可以用来监控磁盘I/O的情况。
磁盘命令
df (disk free)
1 | -a:全部文件系统列表,包含虚拟文件系统 |
fdisk
1 | -l 列出素所有分区表 |
java性能监控命令
top
查看当前所有进程cpu、内存使用情况
top -H -p [java pid]: 查看java进程下所有线程的情况ps
ps -ef | grep java
查看java进程pidstat
pidstat -p [java pid]
进程监控命令安装方式:
Debian/Ubuntu:apt-get install sysstat
CentOS/Fedora/RHEL:yum install sysstatjstat
jstack
jps
jmap
Java线上故障
线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。
基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。
https://blog.csdn.net/weixin_39609166/article/details/114825626
CPU
异常常见原因:
- 业务逻辑问题(死循环)
- 频繁gc
- 上下文切换过多
CPU问题排查步骤
- 执行
top
命令:查看所有进程占系统CPU的排序。极大可能排第一个的就是咱们的java进程(COMMAND列)。PID那一列就是进程号。 - 执行
top -H -p 进程号
命令:查看java进程下的所有线程占CPU的情况。
-H参数:显示进程下的线程,一般结合p参数使用,查看某个进程下的线程,例如: top -H -p 1。 - 执行
printf "%x\n" 线程号
命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到线程堆栈信息,需要把线程号转成16进制。
例如, printf “%x\n” 10 -》打印:a,那么在jstack中线程号就是0xa。 - 执行
“jstack 进程号 | grep 线程ID”
查找某进程下 -》线程ID(jstack堆栈信息中的nid)=0xa的线程堆栈信息。
如果“”VM Thread” os_prio=0 tid=0x00007f871806e000 nid=0xa runnable”,第一个双引号圈起来的就是线程名,如果是“VM Thread”这就是虚拟机GC回收线程了 - jstat
- jmap
内存
内存问题排查起来相对比 CPU 麻烦一些,场景也比较多。
主要包括:
- OOM
- GC问题
- 堆外内存。