簡體   English   中英

新貴的Java應用程序看到了很高的CPU使用率

[英]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來識別

  • 進程pid 7848
  • 高CPU線程pid 7849

然后在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM