首页 > 解决方案 > 线程数过多的问题

问题描述

我对 PlayFramework 中的线程名称有一些疑问。我在 Play 上开发了 Rest-API 服务大约 5 个月。该应用程序只需访问 MySQL,并将 json 格式的数据发送回客户端。我已经理解了“阻塞 io”的坑,所以我创建了一个用于阻塞 io 的线程池,并将其全部用于阻塞线程执行的 Future 块。线程池的定义如下。

akka {
  actor-system = "myActorSystem"


  blocking-io-dispatcher {
    type = Dispatcher
    executor = "thread-pool-executor"
    thread-pool-executor {
      fixed-pool-size = 64
    }
    throughput = 10
  }
}

我检查了日志文件,并确保所有非阻塞逻辑都在名为“application-akka.actor.default-dispatcher-#”的线程下运行,其中

是整数值,并且所有阻塞逻辑都在名为的线程下运行

“应用程序阻塞 io 调度程序”。然后我使用'Jconsole'检查了所有线程名称和计数。名为“application-akka.actor.default-dispatcher-#”的线程数始终小于 13,“application-blocking-io-dispatcher-#”的线程数始终小于 30。但是,总线程数我的应用程序在其下运行的 JVM 不断增加。线程总数超过10,000。

有很多线程的名称以“default-scheduler-”或“default-akka.actor.default-dispatcher”开头。

我的问题是

一个。'application-akka.actor.default-dispatcher' 和 'default-akka.actor.default-dispatcher-' 有什么区别?

湾。线程数增加有什么原因吗?

我想解决这个问题。
这是我的环境。

操作系统:Windows 10 专业版。64位

CPU : Intel(R) Core i7 @ 3.5GHz

内存:64GB

JVM:1.8.0_162 64位

播放框架:2.6

关系型数据库:MySQL 5.7.21

任何建议将不胜感激。提前致谢。

标签: multithreadingplayframeworkdispatcher

解决方案


Finally I solved the problem. There was a bug that would not shutdown the instance of akka's Materializor. After modifying the code, thread count in the VM keeps stable value. Thanks.


推荐阅读