Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
51940 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
代码篇 (23讲)
Java 业务开发常见错误 100 例
15
15
1.0x
00:00/00:00
登录|注册

34 | 加餐4:分析定位Java问题,一定要用好这些工具(一)

你好,我是朱晔。今天,我要和你分享的内容是分析定位 Java 问题常用的一些工具。
到这里,我们的课程更新 17 讲了,已经更新过半了。在学习过程中,你会发现我在介绍各种坑的时候,并不是直接给出问题的结论,而是通过工具来亲眼看到问题。
为什么这么做呢?因为我始终认为,遇到问题尽量不要去猜,一定要眼见为实。只有通过日志、监控或工具真正看到问题,然后再回到代码中进行比对确认,我们才能认为是找到了根本原因。
你可能一开始会比较畏惧使用复杂的工具去排查问题,又或者是打开了工具感觉无从下手,但是随着实践越来越多,对 Java 程序和各种框架的运作越来越熟悉,你会发现使用这些工具越来越顺手。
其实呢,工具只是我们定位问题的手段,要用好工具主要还是得对程序本身的运作有大概的认识,这需要长期的积累。
因此,我会通过两篇加餐,和你分享 4 个案例,分别展示使用 JDK 自带的工具来排查 JVM 参数配置问题、使用 Wireshark 来分析网络问题、通过 MAT 来分析内存问题,以及使用 Arthas 来分析 CPU 使用高的问题。这些案例也只是冰山一角,你可以自己再通过些例子进一步学习和探索。
在今天这篇加餐中,我们就先学习下如何使用 JDK 自带工具、Wireshark 来分析和定位 Java 程序的问题吧。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • Darren
    1、jmap -dump是会dump所有的对象,不关心是否可达;jmap -dump:live只会dump存活的对象,即可以从GcRoot可达的对象。测试是在循环中,一直创建对象,然后休眠1s,dump2次,发现创建对象的个数不同。

    作者回复: 👍🏻

    22
  • 程序员小跃
    老师,你让我这个Java重新整理了方向,这才是 Java 更高层次需要掌握的东西,不然平时只知道写代码,遇到问题只会重启的话,对自己能力的提升实在是太慢了。 Java 的世界,还是离不开 JVM的判断。Wireshark 原来还可以分析 MySQL 相关,以前一直觉得只能网络抓包呢,哈哈

    作者回复: 觉得专栏好可以多分享推荐给其他人

    2
    6
  • 小杰
    老师现在特别火的阿里定位问题的工具Arthas 是不是都是拿jvm工具实现的呢,感觉很强大

    作者回复: 不是,是通过javaagent实现的(动态加载),后面一篇加餐也会介绍Arthas的使用。

    6
  • 👽
    墙裂建议收藏,总有一天用得着。

    作者回复: :)

    5
  • 梦倚栏杆
    -XX:ThreadStackSize=256k 实际效果是256M -Xss:256k 实际效果是256k 官方文档提示这两个参数效果等同,都是byte为单位 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABHDABI

    作者回复: 是,我估计这是老版本JDK的一个Bug,文中为了演示工具使用我特意选择了这个案例来演示,平时我自己只用Xss

    2
    4
  • 梦倚栏杆
    老师,你的第一个演示我这儿直接就被杀掉了 java -jar target/java-common-mistakes-0.0.1-SNAPSHOT.jar -Xms1g -Xmx1g jps 正常 jinfo $pid 提示:Error attaching to process : Can't attach symbolicator to the process 发现进程已经被kill掉

    作者回复: 网上说是jdk的bug,仅仅发生于macos怀疑和权限有关系。遇到问题最好先自己搜索一下,尝试解决一下。

    4
    3
  • vivi
    jmap -dump是输出堆中所有对象 jmap -dump:live是输出堆中所有活着的对象 而且jmap -dump:live会触发gc 线上使用要注意这个

    作者回复: 没错

    2
    2
  • 刘大明
    这篇定位java问题的文章,真的是打开了新天地.以前重来没有关注过jvm相关的信息,这次是开了眼界.

    作者回复: 😀

    2
  • 若镜O
    作为同样的一个15years+的programmer 不得不说 老师分享的足够干货 多谢。

    作者回复: 感谢

    1
  • FelixFly
    老师,咨询一下Full GC 基本 10 秒一次这个结论是怎么总结出来的?Full GC一般控制在多少秒一次比较好?

    作者回复: jstat -gcutil 23940 5000 100,这个5秒输出一次,FGC列基本2次+1 gc次数不是主要优化目标,gc优化目标一般是吞吐量(throughput) 或者暂停时间(pause times),具体可以搜一下相关资料

    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部