GC 为何会导致线程数降低?
疑惑
近期收到一些报警,是方法性能报警,定位原因主要是瞬时流量突增引起的,但是观察方法中查询 MySQL 的性能不差,性能花费在哪里?同时观察 JVM 性能,发现 YoungGC 变多了,CPU 使用率高了,但线程数在当时刻降低了,YoungGC 会创建新线程进行垃圾回收,应该线程数增多,为什么会降低的?


解惑
性能为什么慢了?
由于提供服务的 API 所依赖的 MySQL 性能并不慢,那原因是什么?唯一的问题点就是流量,流量突增引发系统开启大量线程进行处理,线程状态处于 Running 或 Runable 状态,这时操作系统(分时操作系统)会让 CPU 进行分时处理,从而引发 CPU 使用率上升。多线程并发处理会让服务器处理速度变快,但对于单个服务响应会变慢。
还有我们一般的系统架构部署多是 Nginx - Tomcat,而 Tomcat 默认线程数多是1000上限,且Tomcat 7以下版本默认是 BIO 模式,超过上限的线程会在 Tomcat 阻塞队列里等待,所以对于调用方来说,感知的时间会更久一些。
This chapter requires login to view full content. You are viewing a preview.
Login to View Full Content