常用命令

服务器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
2
3
4
5
6
7
8
参数说明:
d : 监控内容刷新的时间间隔。
p : 只监控指定PID的进程。
H : 显示进程下的线程,一般结合p参数使用,查看某个进程下的线程,例如: top -Hp 8080。
c : 切换显示模式,只显示名称,或者显示完整的路径与名称。
s : 安全模式,交谈式指令无法使用, 例如k指令。
i : 不显示任何闲置或无用的进程,也可以理解成只显示正在执行的进程。
n : 限定监控内容刷新的次数,完成后将会退出 top 视图。例如 top -n 5,默认3秒刷新一次,那么在15s后,自动退出top视图。

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
2
3
4
5
6
7
8
9
10
11
-a:全部文件系统列表,包含虚拟文件系统
-B:指定显示scale size,比如以M,G为单位显示
-h:方便人阅读方式显示。
-H:和-h相似,不过其中1k = 1000byte, 1M=1000k
-i:列出inode的信息
-k :区块为1024字节
-l :显示本地文件系统
-p:使用POSIX规范输出
-t:打印指定的文件系统类型
-T:显示文件系统类型
-x:不打印指定的文件系统类型

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 sysstat

  • jstat

  • jstack

  • jps

  • jmap

Java线上故障

线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。
基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。

https://blog.csdn.net/weixin_39609166/article/details/114825626

CPU

异常常见原因:

  1. 业务逻辑问题(死循环)
  2. 频繁gc
  3. 上下文切换过多

CPU问题排查步骤

  1. 执行top命令:查看所有进程占系统CPU的排序。极大可能排第一个的就是咱们的java进程(COMMAND列)。PID那一列就是进程号。
  2. 执行top -H -p 进程号命令:查看java进程下的所有线程占CPU的情况。
    -H参数:显示进程下的线程,一般结合p参数使用,查看某个进程下的线程,例如: top -H -p 1。
  3. 执行printf "%x\n" 线程号命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到线程堆栈信息,需要把线程号转成16进制。
    例如, printf “%x\n” 10 -》打印:a,那么在jstack中线程号就是0xa。
  4. 执行“jstack 进程号 | grep 线程ID” 查找某进程下 -》线程ID(jstack堆栈信息中的nid)=0xa的线程堆栈信息。
    如果“”VM Thread” os_prio=0 tid=0x00007f871806e000 nid=0xa runnable”,第一个双引号圈起来的就是线程名,如果是“VM Thread”这就是虚拟机GC回收线程了
  5. jstat
  6. jmap

内存

内存问题排查起来相对比 CPU 麻烦一些,场景也比较多。
主要包括:

  • OOM
  • GC问题
  • 堆外内存。

磁盘

网络