最近,我们开始使用PlayFramework,并发现CPU负载中有一些异常 Activity 。
机器详细信息和其他配置:
32G Machine
12 Cores
PlayFramework 2.2.0
java -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m
java applications are running within a docker container(Docker version 0.8.0).
nginx后面有6个运行服务器
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31752 root 20 0 7876m 1.2g 14m S 716 3.8 150:55.28 java
26282 root 20 0 7862m 1.2g 14m S 48 3.8 310:51.65 java
56449 root 20 0 7789m 389m 13m S 2 1.2 0:33.10 java
40006 root 20 0 7863m 1.2g 14m S 2 3.8 17:56.41 java
42896 root 20 0 7830m 1.2g 14m S 1 3.8 15:10.30 java
52119 root 20 0 7792m 1.2g 14m S 1 3.7 8:48.38 java
请求速率最大为100Req / s。
有人遇到过类似的问题吗?
请告诉我。
最佳答案
我遇到了类似的问题。但是,我在机器上的开发设置上只有麻烦:
docker容器中的
-> VM内100%CPU负载
在我们的实时环境中不存在问题,在该环境中,该应用程序是通过启动脚本预先打包运行的。我们也将其运行在docker容器中(该容器又在EC2 VM中运行)。
因此,就我而言,Play Run似乎有所作为-您是否使用Play Run在Docker容器内启动应用?
编辑:另外,Netty中似乎有一个与epoll选择器有关的错误:
http://www.electrotank.com/forums/showthread.php?12927-Well-Known-JDK-bug-in-Netty
https://code.google.com/p/spymemcached/issues/detail?id=279
第二个链接描述了一种解决方法,该方法涉及将-XX:CMSInitiatingOccupancyFraction JVM参数设置为80或类似值。
就我而言,这无济于事...
您可能会考虑对Java进程进行性能分析,例如使用
sudo strace -cf -p <pid>
看看是否有可疑的东西出现。
关于scala - Playframework异常的CPU负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261807/