[英]upstart java application see high cpu usage
我有一个基于Java的应用程序在ubuntu上运行,为了启动服务器并使它保持活动状态,我编写了一个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
谢谢。
好,问题解决了:
用top -H
来识别
然后在python
>>> hex(7849)
'0x1ea9'
做threaddump:
$ 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)
我认为在命令行中这是可以的,因为进程优先级较低,而在新贵中则不是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.