我有一台服务器,有48个CPU,在TomEE + 7.0.2上托管Java EE 7 REST API。
一些API需要在运行并行算法时尽可能多地使用CPU。 并行化部分不需要任何数据库或其他资源,只需要在共享的double [] []矩阵中进行一些繁重的工作。
我通常在EJB上下文中工作,但对于这个特定的实例,它不是一个要求(也不是必须的)。
到目前为止,我正在使用
ExecutorService pool = Executors.newFixedThreadPool(maxThreads);
为了实例化一个执行器,但由于这似乎在操作系统级别上产生实际线程,我不是它的忠实粉丝 - 经过一些JMeter负载测试后它甚至导致了一个点,整个bash被阻塞了在硬重启之前我甚至无法SSH服务器。
我偶然发现了#34; Managed Executor Service"的概念,但是我无法在线找到如何使用它的教程/示例(并且还配置它)。
有人可以分享以下想法吗?
a)如何在TomEE中配置线程池(例如,通过server.xml,context.xml或tomee.xml),代码示例将不胜感激?
b)有没有办法只使用一些默认的线程池(并且非常聪明,不需要调优,如果没有,我可以从哪里开始调优)?
c)如何在Java中查找线程池 - 首选通过JDNI查找?
d)如果我曾经决定将该资源作为EJB的一部分,那么注入代码会是什么样子?
我的应用程序上下文被指定为" myContext"在server.xml中,如果您提供样本,请指出查找字符串的外观如何?
除此之外,我有一个非常简单的TomEE + 7.0.2安装,到目前为止我没有触及任何配置。
非常感谢你的帮助!
丹尼尔
答案 0 :(得分:0)
如果您注入@ManagedExecutorService,TomEE应该为您提供默认服务和池。如果没有,那可能就是一个错误:
@Resource
private ManagedExecutorService mes;
你应该可以像这样在TomEE.xml中配置它(我没有测试过这个):
<Resource id="myManagedExecutorService" type="javax.enterprise.concurrent.ManagedExecutorService">
Core = 5
Max = 25
KeepAlive = 5 s
Queue = 15
WaitAtShutdown = 30 seconds
</Resource>
在您的代码中:
@Resource("myManagedExecutorService")
private ManagedExecutorService mes;
我通过查看service-jar.xml来解决这个问题。在我看来,您可能还想要JMS和@Asyncronous这些选项比ManagedExecutorService好一些
答案 1 :(得分:0)
您可以在http://tomee.apache.org/admin/configuration/resources.html#_managedexecutorservice
找到相关文档这些执行者的主要优点是:
inmee we ali