Java排查线上问题、负载、OOM、日志处理等命令大全。

文章目录

  • 前言
  • 1. 排查思路
  • 2. JVM命令
    • 2.1 jps
    • 2.2 jstat
    • 2.3 jmap
    • 2.4 jinfo
    • 2.5 jstack
  • 3. Liunx环境相关命令
    • 3.1 网络
    • 3.2 内存及磁盘
    • 3.2 CPU
  • 4. Liunx文本处理命令
  • 5. 总结


前言

作为一名合格专业的Java程序员,除了做好基本的代码开发之外,熟练的使用一些三方的组件,以及他们在服务器环境的搭建、使用、排查问题都是不可或缺的技能,还有在服务器快速检索日志等一些文本处理的方法等等。本篇文章会为大家分享下一些非常好用的命令和使用的技巧。

1. 排查思路

可以参考我之前发布的一篇博客:

https://blog.csdn.net/qq_29279641/article/details/122835511

主要思路是针对你的问题表象,排查服务运行情况、机器的资源使用情况等。

  1. 排查服务运行情况: 可以通过命令ps -ef |grep 服务名,查看对应的进程运行状况。
  2. 查看服务日志:这是最基本的操作了,看看日志情况有没有思路找到问题。可以通过cat | tail | head 等文本查看命令。
  3. 查看JVM的运行及资源使用情况:后面会详细介绍,主要排查系统产生OOM导致服务不可用这类问题。
  4. 机器资源使用情况:比如内存、磁盘、网络、CPU等等资机器源是不是负载过高了导致服务不可用。

一般来说,针对实际的场景,对以上这些内容进行排查,你就基本掌握了解决线上问题的能力了。

2. JVM命令

JVM为我们提供了一些命令,协助我们去定位问题。

2.1 jps

jps的作用是显示指定系统内所有的HotSpot虚拟机进程,这个命令可以被liunx里面的ps命令所替代。

2.2 jstat

jstat的作用是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

具体的命令option大家可以自行去了解,给大家举个查看gc情况和类加载情况的使用例子。
类加载信息:可以接-class,结果包含的是类加载的数量和字节数,卸载的数量和字节数。
(注:图中的1881是进程号,通过jps可以查到)
在这里插入图片描述

GC执行情况:可以看到的是每个内存区域的总容量以及已使用容量。(S0C:survivor0区的总容量,S0U:survivor0区已使用的容量),还有新生代、老年代的GC运行次数以及耗时信息(YGC:新生代垃圾回收次数;YGCT:新生代垃圾回收时间)。
在这里插入图片描述

2.3 jmap

jmap命令用于生成heap dump文件,及生成jvm内存快照。

option 描述
dump 生成堆内存快照
heap 显示Java堆详细信息
histo 显示堆中对象的统计信息

在排查oom问题的时候可能会常用到以下命令,实际线上是不可能导出dump文件进行工具分析的,主要使用histo,可以清晰的看到class instance占据内存的大小,帮助排查哪些对象导致了oom。
Java排查线上问题、负载、OOM、日志处理等命令大全。_第1张图片

2.4 jinfo

jinfo是实时查看和调整虚拟机运行参数。比如查看当前虚拟机的各个内存区域当前大小,使用的垃圾回收器等基本信息。

2.5 jstack

jstack用于生成java虚拟机当前时刻的线程快照。生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

3. Liunx环境相关命令

3.1 网络

网络是程序运行的非常重要的一环,网络的连通性,协议的使用,决定了程序对外开发服务的能力。

  • ifconfig:查看所有可用网卡接口、IP 地址、硬件地址等。同时可以启用或禁用网络接口,并允许你将 IP 地址和网络掩码分配给选定的接口。
  • ping:非常常用的一个命令,可帮助你识别网络和主机的网络是否可达。
  • netstat:主要用来监控TCP/IP网络非常有用的工具,可以显示路由表、还可以显示IP、TCP、UDP等协议的统计数据,一般用于校验本机各端口的网络情况。

netstat命令:可以看到命令执行后的输出,有协议、端口号、源目的、以及当前所处的状态。以TCP为例,可以看到TCP协议所处状态以及TCP的连接队列数量。
Java排查线上问题、负载、OOM、日志处理等命令大全。_第2张图片

3.2 内存及磁盘

查看磁盘:df -lh。可以看到对应文件系统的内存大小、使用量等,非常直观。
Java排查线上问题、负载、OOM、日志处理等命令大全。_第3张图片
查看内存:free -g即可。

3.2 CPU

查看cpu的情况实际上使用一个综合命令top命令比较多,可以看到cpu、内存等综合信息。
Java排查线上问题、负载、OOM、日志处理等命令大全。_第4张图片

4. Liunx文本处理命令

  • 查看:cat/head/more/tail 查看文本,这几个命令都可以,主要区别就是查看文本位置和数量,一般用cat就可以,组合head和tail筛选前或者后n条数据。
  • 过滤:grep 用于过滤文本,可添加-V进行文本排除
  • 排序:sort 排序,可对文本进行自然排序
  • 去重:uniq 去重,需要结合sort命令使用
  • 统计: wc -l 统计文本行数
  • 分割:awk是个非常强大的命令,可以指定分割字符串并输出指定的分割位置,结合这几个命令可以非常好的起到文本中关键内容的统计和分析。

举例: 逗号分隔包含hello的文件行的文本,并输出分割文本的第一段,进行排序去重统计行数

cat test.txt |awk -F ',' '{print $1}' |grep 'hello' sort uniq |wc -l

5. 总结

掌握了以上的所有命令,相信在服务器环境你可以轻松的拿捏各种场景,祝愿大家都成为一名优秀的工程师。

你可能感兴趣的:(java,开发语言)