导
Lead
语
异步系统中为什么会出现OOM问题?如何避免?揭秘时刻到啦!今天小编带大家了解异步系统中的OOM问题。
在Java编程中,我们经常使用ExecutorService线程池服务类来处理请求异步执行的问题。在这种方案中,请求的具体逻辑实际上是交给了各个步骤的执行器(executor)进行处理。在这整个过程中没有任何阻塞的地方,各个步骤待处理的任务都被隐式地存放在了各个执行器的任务队列中。如果各执行器处理得足够快,那么它们的任务队列都能被及时消费,这样不会存在问题。但是,一旦有某个步骤的处理速度比不上请求接收线程接收新请求的速度,那么必定有部分执行器任务队列中的任务会不停增长。由于执行器任务队列默认是非阻塞且不限容量的,这样当任务队列里积压的任务越来越多时,终有一刻,JVM的内存会被耗尽,抛出OOM系统错误后程序异常退出。