Java业务开发常见错误100例
朱晔
贝壳金服资深架构师
立即订阅
5564 人已学习
课程目录
已更新 37 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 业务代码真的会有这么多坑?
免费
代码篇 (20讲)
01 | 使用了并发工具类库,线程安全就高枕无忧了吗?
02 | 代码加锁:不要让“锁”事成为烦心事
03 | 线程池:业务代码最常用也最容易犯错的组件
04 | 连接池:别让连接池帮了倒忙
05 | HTTP调用:你考虑到超时、重试、并发了吗?
06 | 20%的业务代码的Spring声明式事务,可能都没处理正确
07 | 数据库索引:索引并不是万能药
08 | 判等问题:程序里如何确定你就是你?
09 | 数值计算:注意精度、舍入和溢出问题
10 | 集合类:坑满地的List列表操作
11 | 空值处理:分不清楚的null和恼人的空指针
12 | 异常处理:别让自己在出问题的时候变为瞎子
13 | 日志:日志记录真没你想象的那么简单
14 | 文件IO:实现高效正确的文件读写并非易事
15 | 序列化:一来一回你还是原来的你吗?
16 | 用好Java 8的日期时间类,少踩一些“老三样”的坑
17 | 别以为“自动挡”就不可能出现OOM
18 | 当反射、注解和泛型遇到OOP时,会有哪些坑?
19 | Spring框架:IoC和AOP是扩展的核心
20 | Spring框架:框架帮我们做了很多工作也带来了复杂度
设计篇 (6讲)
21 | 代码重复:搞定代码重复的三个绝招
22 | 接口设计:系统间对话的语言,一定要统一
23 | 缓存设计:缓存可以锦上添花也可以落井下石
24 | 业务代码写完,就意味着生产就绪了?
25 | 异步处理好用,但非常容易用错
26 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?
安全篇 (4讲)
27 | 数据源头:任何客户端的东西都不可信任
28 | 安全兜底:涉及钱时,必须考虑防刷、限量和防重
29 | 数据和代码:数据就是数据,代码就是代码
30 | 如何正确保存和传输敏感数据?
不定期加餐 (6讲)
加餐1 | 带你吃透课程中Java 8的那些重要知识点(上)
加餐2 | 带你吃透课程中Java 8的那些重要知识点(下)
加餐3 | 定位应用问题,排错套路很重要
加餐4 | 分析定位Java问题,一定要用好这些工具(一)
加餐5 | 分析定位Java问题,一定要用好这些工具(二)
加餐6 | 这15年来,我是如何在工作中学习技术和英语的?
Java业务开发常见错误100例
15
15
1.0x
00:00/00:00
登录|注册

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

朱晔 2020-04-21
你好,我是朱晔。今天,我要和你分享的内容是分析定位 Java 问题常用的一些工具。
到这里,我们的课程更新 17 讲了,已经更新过半了。在学习过程中,你会发现我在介绍各种坑的时候,并不是直接给出问题的结论,而是通过工具来亲眼看到问题。
为什么这么做呢?因为我始终认为,遇到问题尽量不要去猜,一定要眼见为实。只有通过日志、监控或工具真正看到问题,然后再回到代码中进行比对确认,我们才能认为是找到了根本原因。
你可能一开始会比较畏惧使用复杂的工具去排查问题,又或者是打开了工具感觉无从下手,但是随着实践越来越多,对 Java 程序和各种框架的运作越来越熟悉,你会发现使用这些工具越来越顺手。
其实呢,工具只是我们定位问题的手段,要用好工具主要还是得对程序本身的运作有大概的认识,这需要长期的积累。
因此,我会通过两篇加餐,和你分享 4 个案例,分别展示使用 JDK 自带的工具来排查 JVM 参数配置问题、使用 Wireshark 来分析网络问题、通过 MAT 来分析内存问题,以及使用 Arthas 来分析 CPU 使用高的问题。这些案例也只是冰山一角,你可以自己再通过些例子进一步学习和探索。
在今天这篇加餐中,我们就先学习下如何使用 JDK 自带工具、Wireshark 来分析和定位 Java 程序的问题吧。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java业务开发常见错误100例》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

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

    作者回复: 👍🏻

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

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

    2020-04-21
    3
  • 海林
    明天上班路上好好读
    2020-04-22
    2
  • 梦倚栏杆
    -XX:ThreadStackSize=256k 实际效果是256M
    -Xss:256k 实际效果是256k
    官方文档提示这两个参数效果等同,都是byte为单位
    https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABHDABI

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

    2020-04-22
    1
    2
  • 梦倚栏杆
    老师,你的第一个演示我这儿直接就被杀掉了
     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怀疑和权限有关系。遇到问题最好先自己搜索一下,尝试解决一下。

    2020-04-22
    3
    2
  • 👽
    墙裂建议收藏,总有一天用得着。

    作者回复: :)

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

    作者回复: 😀

    2020-04-21
    2
  • Geek_3b1096
    重新认识用Wireshark分析问题,谢谢老师

    作者回复: 不客气

    2020-05-01
    1
  • 行者
    期待下一篇加餐~
    2020-04-25
    1
  • hellojd
    连接mysql,可以指定固定端口?怎么设置?有啥意义?不太明白
    2020-04-22
    1
    1
  • 不能忍的地精
    刚好最近在看JVM.昨天利用jvm的工具发现了生产OOM的原因,今天又补课了
    2020-04-21
    1
  • vivi
    jmap -dump是输出堆中所有对象 jmap -dump:live是输出堆中所有活着的对象 而且jmap -dump:live会触发gc 线上使用要注意这个

    作者回复: 没错

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

    作者回复: jstat -gcutil 23940 5000 100,这个5秒输出一次,FGC列基本2次+1

    gc次数不是主要优化目标,gc优化目标一般是吞吐量(throughput) 或者暂停时间(pause times),具体可以搜一下相关资料

    2020-05-13
  • 润欢➿
    老师课程真的很好,带我进入了新java领域。

    感谢,每节课都有认真看。写md笔记。

    作者回复: 👍🏻 欢迎多分享转发

    2020-05-12
  • 子不语
    老师好,第一个例子,启动 10 个死循环的线程,每个线程分配一个 10MB 左右的字符串,然后休眠 10 秒,完整的代码能给下吗。或者能否把案例的代码都上传到github。

    作者回复: 文中所有代码github都有源码 你再找找 看下readme.md

    2020-05-02
    1
收起评论
15
返回
顶部