我有一个基于java的应用程序要在ubuntu上运行,为了从服务器开始并保持它的活力,我编写了一个upstart脚本。
问题是启动了upstart服务,它消耗了100%的cpu,这个应用程序有很多线程,只有一个线程很高。
请注意,从命令行启动java应用程序不会出现此问题。
description "adworker upstart service"
#umask 0007
respawn limit 15 5
oom never
start on (local-filesystems
and net-device-up IFACE!=lo)
stop on shutdown
respawn
pre-start script
. /etc/adworker.conf
rm -rf $LOG_DIR
mkdir -p -m0755 $LOG_DIR
chown $USER:$GROUP $LOG_DIR
end script
script
. /etc/adworker.conf
OPTS="-Djava.ext.dirs=lib"
chdir $APP_DIR
JAVA_OPTS="-Xms${XMS} -Xmx${XMX} -Xss${XSS} $OPTS"
exec su -s /bin/sh -c "/usr/bin/java ${JAVA_OPTS} -classpath ${CP} ${MAIN_CLASS}" $USER > ${LOG_DIR}/adworker.stdio 2>&1
end script
post-stop script
end script
非常感谢。
好的,问题解决了:
引用了此帖子中的解决方案
用于识别
然后在python
中
>>> hex(7849)
'0x1ea9'
执行线程转储:
$ sudo jstack 7849 >> threaddumps.log
$ cat threaddumps.log | less
搜索0x1ea9,发现它位于主类的第24行,该行有一个从stdin读取的愚蠢while循环。
"main" prio=10 tid=0x00007f6714008800 nid=0x1ea9 runnable [0x00007f6719088000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:242)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
- locked <0x00000000bfb81980> (a java.io.BufferedInputStream)
at com.adcade.SessionEventWorker.main(SessionEventWorker.java:24)
我相信在命令行中是可以的,因为进程优先级较低,而在upstart中则不是这样。
问题内容: 我有一个Java应用程序(基于Web),有时显示几个小时的CPU使用率很高(几乎90%)。Linux 命令显示了这一点。重新启动应用程序后,问题消失了。 因此要调查 : 我使用线程转储来查找线程在做什么。发现多个线程处于状态,一些处于其他状态。在进行重复的线程转储时,我确实看到了一些始终处于状态的线程。因此,他们似乎是罪魁祸首。 但是我无法确定是哪个线程正在占用CPU或进入了无限循环(
问题内容: 说“用cpu = 800和内存= 1024运行myApp.jar” 我从事Java编程已经很多年了,问这个问题很尴尬。我什至不知道这是否可能。如果是这样,怎么办? 我只想知道是否可以设置Java程序的最大内存和cpu使用率。我突然想到了这个,因为我最近开始开发移动应用程序。我想知道该应用程序在内存和处理器非常有限的设备上的表现。 我看到带有演示应用程序的物理引擎可以在浏览器上运行,也可
percentCPUUsage Number - 上一次调用getCPUUsage之后使用的CPU占比。 idleWakeupsPerSecond Number - 上一次调用getCPUUsage之后每秒钟的平均空闲cpu唤醒次数。 以上两个参数首次获取均默认返回 0.
我有一个Java应用程序(基于web),它有时会在几个小时内显示非常高的CPU利用率(几乎90%)。Linux的TOP命令显示了这一点。重新启动应用程序时,问题就会消失。 所以要调查: 我使用线程转储来查找线程正在执行的操作。有几个线程处于“可运行”状态,一些线程处于其他一些状态。在重复执行线程转储时,我确实看到一些线程总是处于“可运行”状态。因此,他们似乎是罪魁祸首。 但我无法确定,哪个线程占用
问题内容: 关闭。 这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 最近,我的服务器CPU性能一直很高。 CPU平均负载为13.91(1分钟)11.72(5分钟)8.01(15分钟),而我的站点的流量仅略有增加。 运行完最高命令后,我看到MySQL使用的CPU是160%! 最近,我一直在优化表,并切换到持久连接。这会
我正在使用mod安全规则https://github.com/SpiderLabs/owasp-modsecurity-crs清理用户输入数据。在将用户输入与mod security rule正则表达式匹配时,我面临着cpu激增和延迟。总的来说,它包含500个正则表达式来检查不同类型的攻击(xss、badrobots、generic和sql)。对于每个请求,我检查所有参数并对照所有这500个正则表