Java CPU占用过高故障排除

    哎…最近又被策划坑了,因为配置错误,导致程序出现了死循环。当然,这也不能全怪策划,归根结底还是我代码的健壮性不够。 在排除问题的过程中,我参考了之前解决类似问题时的笔记,最近正好开始写博客了,所以就整理了一下,并且那次出问题的代码也更好理解一些。 故事发生在四年前的一个下午 当时没有什么开发任务,正在刷V2EX,就听Fu老大说,“上边安排给咱们一个任务,说是生产服务器的CPU占用,有时候会突然上涨到100%,别的组都查不到原因,也复现不了问题,现在服务器又出问题了,任务交给咱们组了”, 我听到这个消息,心想我表(zhuang)现(bi)的机会来了。 那个时候我是一个比现在还菜的

    Java benchmark 工具 JMH

    为什么需要Benchmark工具 如果想要知道一段代码的性能如何,一种常用的做法可能是这样的: long start = System.currentTimeMillis(); // do something … System.out.println(System.currentTimeMillis() - start); 这样做,存在几个问题: 结果不够精确 首先,System.currentTimeMillis() 的注释里明确表示了,根据操作系统的不同,会存在数十毫秒的误差。虽然这个问题比较容易解决,但是造成测试结果不精确的主要原因并不是时间函数的误差,而是JVM和JIT在运行时