最近我们开始使用PlayFramework并在CPU负载中看到一些异常活动。
机器详细信息和其他配置:
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。
之前有没有人遇到过类似的问题? 请告诉我。
答案 0 :(得分:1)
我遇到了类似的问题。但是,我只是在我的机器上进行开发设置时遇到了问题:
- > VM内部100%CPU负载
问题不存在于我们的实时环境中,其中应用程序通过 start 脚本预先打包运行。我们还让它在那里的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>
并查看是否有任何可疑现象。
答案 1 :(得分:0)
你是如何运行游戏应用程序的?与play ~run
一起运行时,我遇到了类似的高负载,因为它会不断监视文件的变化。