前段时间我们遇到了dubbo无权限写本地注册文件引起的CPU 100%问题,最终排查结果是由一个死循环引起。作为后端开发攻城狮,日常开发时不时会遇到一些CPU使用率异常的问题,那么针对这些情况怎么排查?
一、常见能够引起CPU100%异常的情况都有哪些?
1. Java 内存不够或者溢出导致GC overhead limit exceeded。 2. 代码中互相竞争导致的死锁。 3. 特别耗费计算资源的操作,比如正则匹配,Java中的正则匹配默认有回溯问题,复杂的正则匹配引起的CPU异常。 4. 死循环引起的CPU高度密集计算。
针对第1种,根据Oracle官方资料,GC overhead limit exceeded表示JVM一直在GC导致应用程序变慢,具体量化指标就是JVM执行垃圾回收花费超过98%的时间,但释放出的可用堆内存却少于2%,连续多次(一般5次)GC回收的内存都不足2%的情况下就会抛