jstack-线程分析利器全解

jstack-线程分析利器全解 jstack作用 在命令行下, 执行man jstack. 1 Description : jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server. jstack为给定的Java进程或核心文件或远程调试服务器打印Java线程的Java堆栈跟踪 jstack 输出分析 可以使用工具: fastthread,通过可视化输出thread dump内容. 十分方便 1 2 3 4 5 6 7 8 9 10 "http-nio-8080-Acceptor-0" #41 daemon prio=5 os_prio=31 tid=0x00007fb9d7239000 nid=0x9803 runnable [0x000070000d26b000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) - locked <0x000000076bb1d4b8> (a java.lang.Object) at org....

May 23, 2019 · 2 min · BlackChen

美团Leaf 分布式ID生成器源码分析

美团Leaf 分布式ID生成器源码分析 There are no two identical leaves in the world. 世界上没有两片完全相同的树叶。 — 莱布尼茨 Leaf 最早期需求是各个业务线的订单ID生成需求。在美团早期,有的业务直接通过DB自增的方式生成ID,有的业务通过redis缓存来生成ID,也有的业务直接用UUID这种方式来生成ID。以上的方式各自有各自的问题,因此我们决定实现一套分布式ID生成服务来满足需求。具体Leaf 设计文档见: leaf 美团分布式ID生成服务 官方代码仓库: Leaf 工程目录结构 项目分为两个模块: leaf-server 和 leaf-core,下面分开进行介绍 leaf-server leaf-server 主要作用是使用spring-boot框架对外提供服务接口. leaf-core leaf-core 是核心代码,提供两种生成的ID的方式,包括号段模式和snowflake模式. 源码分析 相关分析代码已上传到github: 美团 LEAF 核心代码都在leaf-core中. SegmentIDGenImpl分析 查看IDGenServiceTest 执行init方法 执行init方法,从数据库中获取所有的tag,并保留在内存中. 定时从数据库中获取最新数据 获取Id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 @Override public Result get(final String key) { // 必须在 SegmentIDGenImpl 初始化后执行....

March 18, 2019 · 6 min · BlackChen

G1垃圾回收

G1垃圾回收机制 Java Hotspot G1 GC的一些关键技术 深入理解G1垃圾收集器 Getting Started with the G1 Garbage Collector Garbage First Collector 理解 GC 日志分析 gc-easy understanding-g1-gc-logs gc 日志图解 内存优化 从实际案例聊聊Java应用的GC优化 代码 GC

March 6, 2019 · 1 min · BlackChen

rm -rf 需永远警惕

rm -rf 需永远警惕 今日在测试环境修改代码,测试的时候,删除旧的日志文件(方便查看当前最新生成的日志),由于多个终端的切换,导致没有关注文件目录,直接在src目录下执行rm -rf *!!!,真是一个悲惨的教训,上周的代码没有备份,也没有提交版本库…….. 警惕 : 要时刻保持警惕,在执行一些无法逆转,容易产生不可预估的后果的命令时,一定要再三确认. 要随时保持备份,保持第二方案,做好最坏的打算. 解决方案: 在总结一番后,决定写一个类似回收站一样的脚本来防止类似事情的发生. 编写shell 脚本,使用mv命令代替rm命令。 添加以下代码到~/.bashrc中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 alias rm='trash' alias rl='trash_ls' alias rr='trash_rm' alias rg='trash_log' alias realrm='/bin/rm' #-------回收站 TrashHome="${HOME}/....

February 27, 2017 · 3 min · BlackChen