精华内容
下载资源
问答
  • tomcat服务器cpu占用率居高不下的原因分析及解决偶遇服务器cpu飙升,过段时间后正常,反反复复获取cpu占用高的java进程运行中的堆栈信息 偶遇服务器cpu飙升,过段时间后正常,...通过top命令查看cpu占用率高...

    偶遇服务器cpu飙升,过段时间后正常,反反复复

    尝试通过百度,谷歌等搜索,获取可行的解决方案无果,偶然的机会得知 fastthread 可视化分析工具,问题才能顺利解决。

    获取cpu占用高的java进程运行中的堆栈信息

    通过top命令查看cpu占用率高的进程,并记录pid;
    在这里插入图片描述
    分析得到进程9934时不时的就cpu使用了居高不下,最高达到200%,下定决心解决掉;
    在高cpu的占用情况下,下载该进程的运行中堆栈信息:jstack -l 9934 >> 9934.txt
    压缩日志文件 zip 9934.zip 9934.txt
    下载本地分析,通过https://fastthread.io分析日志数据
    在这里插入图片描述
    重点关注 cpu threads 的日志情况:
    在这里插入图片描述
    发现该CaoCaoNotifyApiHandler类在150行存在异常情况
    打开源码 发现
    在这里插入图片描述
    罪恶的源头出现了,修改循环休息1秒,而非原有的无限循环,问题解决。

    总结:
    运行中的定位比较复杂,有时候看着日志也是一头雾水,之前一段时间也是自己看指日志文本不断的分析也没有定位到正真的问题,今天偶然的机会知道了 fastthread 网站,可视化的日志分析工具,使得问题被迅速定位解决 。

    展开全文
  • 之前在在catalina.sh中简单设置JAVA_OPTS=-Xms1024m -Xmx2048m,没起作用,CPU还是超高,机器内存限制再大也设不了了,转而到启动脚本里设置了这一堆参数,没有一个个的排查,到底哪个参数起作用,但实际效果很明显...

    之前在在catalina.sh中简单设置JAVA_OPTS=-Xms1024m -Xmx2048m,没起作用,CPU还是超高,机器内存限制再大也设不了了,转而到启动脚本里设置了这一堆参数,没有一个个的排查,到底哪个参数起作用,但实际效果很明显。

    启动脚本将JAVA_OPTS参数设置:

    vi  /etc/rc.d/init.d/tomcat

    #!/bin/bash
    # chkconfig: 2345 10 90
    # description: Starts and Stops the Tomcat daemon.
     
    export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-7.0.53
    export JAVA_HOME=/usr/java/jdk1.7.0_55
    export JAVA_OPTS="-server \
      -Dfile.encoding=UTF-8 \
      -Dcatalina.logbase=/home/webapp/logs/tomcat7 \
      -Dnet.sf.ehcache.skipUpdateCheck=true
      -XX:+DoEscapeAnalysis
      -XX:+UseConcMarkSweepGC
      -XX:+CMSClassUnloadingEnabled
      -XX:+UseParNewGC
      -XX:+UseParallelGC
      -XX:MaxPermSize=512m 
      -Xms1024m -Xmx2048m"
    export PATH=$JAVA_HOME/bin:$PATH
    
    TOMCAT_START=$CATALINA_HOME/bin/startup.sh 
    TOMCAT_STOP=$CATALINA_HOME/bin/shutdown.sh 
     
    # source function library. 
    . /etc/rc.d/init.d/functions 
    # check that networking is up. 
    [ "${NETWORKING}" = "no" ] && exit 0 
    # check for tomcat script 
    if [ ! -f $CATALINA_HOME/bin/catalina.sh ]; then
             echo "Tomcat not valilable..." 
            exit 
    fi 
    start(){ 
            echo -n "Starting Tomcat: " 
            daemon $TOMCAT_START 
            echo 
            touch /var/lock/subsys/tomcat 
    } 
    stop(){ 
            ps ax --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' \
     | wc | awk '{print $2}' > /tmp/tomcat_process_count.txt 
            read line < /tmp/tomcat_process_count.txt 
            if [ $line -gt 0 ]; then 
                    echo -n "tomcat ( pid " 
                    ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' 
                    echo -n ") is running..." 
                    echo 
                     
                    echo -n $"Shutting down Tomcat: " 
                    daemon $TOMCAT_STOP 
                    rm -f /var/lock/subsys/tomcat.pid echo 
            else 
                    echo "Tomcat is stopped" 
            fi 
             
             
    } 
    restart(){ 
            stop 
            start 
    } 
    status(){ 
            ps ax --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' \
     | wc | awk '{print $2}' > /tmp/tomcat_process_count.txt 
            read line < /tmp/tomcat_process_count.txt 
            if [ $line -gt 0 ]; then 
                    echo -n "tomcat ( pid " 
                    ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' 
                    echo -n ") is running..." 
                    echo 
            else 
                    echo "Tomcat is stopped" 
            fi 
    } 
    case "$1" in 
            start) 
                    start ;; 
            stop) 
                    stop ;; 
            restart) 
                    stop 
                    sleep 3 
                    start ;; 
            status) 
                    status ;; 
            *) 
                    echo "Usage: tomcatd {start|stop|restart|status}" 
                    exit 1 
    esac 
    exit 0


    补充说明:

    -XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。可以同时并行多个垃圾收集线程,但此时用户线程必须停止。这个设置报错,jvm不能创建,取消。

    -XX:+UseParNewGC:设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。

    两个都是年轻代的GC,也都是并行GC,区别就是,parallel gc 是提升吞吐量,parnew gc是serial gc的多线程版。


    如果还不能解决启动慢的问题:

    在$CATALINA_HOME/bin/catalina.sh中加一句:

    -Djava.security.egd=file:/dev/./urandom

    参见: http://ifeve.com/jvm-random-and-entropy-source/


    转载于:https://my.oschina.net/youway/blog/372863

    展开全文
  • 使用top命令查看资源占用情况,发现pid为xxx的进程占用了大量的CPU资源,CPU占用率高达100%,总共CPU使用300%、 示例 [ylp@ylp-web-01 ~]$ top top - 14:51:10 up 233 days, 11:40, 7 users,...

    1、系统出现无法正常访问现象、重启tomcat后系统恢复、但等一会儿系统又无法正常访问了

    2、linux服务器排查

    使用top命令查看资源占用情况,发现pid为xxx的进程占用了大量的CPU资源,CPU占用率高达100%,总共CPU使用300%、

    示例

    [ylp@ylp-web-01 ~]$ top
    top - 14:51:10 up 233 days, 11:40,  7 users,  load average: 6.85, 5.62, 3.97
    Tasks: 192 total,   2 running, 190 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 97.3 us,  0.3 sy,  0.0 ni,  2.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 16268652 total,  5114392 free,  6907028 used,  4247232 buff/cache
    KiB Swap:  4063228 total,  3989708 free,    73520 used.  8751512 avail Mem 
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                               
    
    14063 ylp       20   0 9260488 4.627g  11976 S 776.1 29.8 117:41.66 java   

    2、定位问题线程查看线程占用cpu情况、找出占用cpu较高的线程id

    top -p xxx-H

    3、查看问题线程堆栈

    挑选TID为24607的线程,查看该线程的堆栈情况,先将线程id转为16进制,使用printf "%x\n" tid命令进行转换

    printf "%x\n" 24607

    再使用jstack命令打印线程堆栈信息,命令格式:jstack pid |grep tid -A 30

    [ylp@ylp-web-01 ~]$ jstack 14063 |grep 36f1 -A 30
    "GC task thread#0 (ParallelGC)" prio=10 tid=0x00007fa35001e800 nid=0x36f1 runnable 
    "GC task thread#1 (ParallelGC)" prio=10 tid=0x00007fa350020800 nid=0x36f2 runnable 
    "GC task thread#2 (ParallelGC)" prio=10 tid=0x00007fa350022800 nid=0x36f3 runnable 
    "GC task thread#3 (ParallelGC)" prio=10 tid=0x00007fa350024000 nid=0x36f4 runnable 
    "GC task thread#4 (ParallelGC)" prio=10 tid=0x00007fa350026000 nid=0x36f5 runnable 
    "GC task thread#5 (ParallelGC)" prio=10 tid=0x00007fa350028000 nid=0x36f6 runnable 
    "GC task thread#6 (ParallelGC)" prio=10 tid=0x00007fa350029800 nid=0x36f7 runnable 
    "GC task thread#7 (ParallelGC)" prio=10 tid=0x00007fa35002b800 nid=0x36f8 runnable 
    "VM Periodic Task Thread" prio=10 tid=0x00007fa3500a8800 nid=0x3700 waiting on condition 
    
    JNI global references: 392

    4、发现有大量虚拟机GC现在应查询java进程内存使用情况

     使用命令 jmap -heap xxx 

    发现新生代内存使用过高 修改tomcat内存配置将MaxNewSize 增加重启tomcat后 查看进程内存使用发现新生代内存使用率正常问题解决。

    展开全文
  • linux系统下,一个tomcat web服务的cpu占用率非常,top显示结果超过200%。请求无法响应。反复重启依然同一个现象。 问题排查 1、获取进程信息 通过jdk提供的jps命令可以快速查出jvm进程, jps pid 2、查看...
  • 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用的问题,基本上是负载一天比一天。 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况。 2,...
    问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况。 2,程序代码有问题,出现死循环,可能性极大。 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。 2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下吧。 解决过程: 1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。 2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序: [root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn 显示结果如下: USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME root 10.5 19 - - - - 3626 00:12:48 root 10.1 19 - - - - 3593 00:12:16 找到了耗时最高的线程3626,占用CPU时间有12分钟了! 将需要的线程ID转换为16进制格式: [root@localhost logs]# printf "%x\n" 3626 e18 最后打印线程的堆栈信息: [root@localhost logs]# jstack 2633 |grep e18 -A 30 将输出的信息发给开发部进行确认,这样就能找出有问题的代码。 通过最近几天的监控,CPU已经安静下来了

    转载于:https://www.cnblogs.com/quemengqio/p/6644051.html

    展开全文
  • 一、可能有线程一直占用CPU资源 1. 先通过 ps 查看进程状态,找出进程的PID(8209)。 2.jstack -l 8209 > /usr/local/work/tomcat/...4. 通过top -H -p 8209 命令查看对应进程是哪个线程占用CPU(eg:8308...
  • 公司的一个竞价系统,用tomcat6.0和apche2.2配置,系统是WIN2003企业版 数据库sql2000个人版,最近系统已登录的人一多,sqlservr.exe占用CPU就是60%以上,造成整个系统无法运行,只能重启服务器,重启服务器以后,...
  • liunx下cpu占用率高如何定位代码问题

    千次阅读 2017-06-14 18:32:19
    生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用的问题,基本上是负载一天比一天。 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况。 2,...
  • 有时候我们可能会遇到CPU一直占用过的情况。...下面以定位Tomcat应用占用CPU过的问题为例,讲一下如何解决CPU占用问题。一、首先我们需要先top确定一下那个进程占用CPU最高。执行命令top二、然后我们需...
  • 一个简单的spring-boot mvc服务放在tomcat中执行,虽然服务器配置比较低,但是访问量不大,一般没什么太大问题。服务部署后,即使没有...首先,需要查询哪个线程占用CPU高,这里使用top命令,top -H -p [tomcat pid...
  • 但是启动后cpu占用率一下就上去了,阿里云的服务器,单核,2G内存,windows 2012 我用visualvm查看运行情况 ![![图片说明](https://img-ask.csdn.net/upload/201506/05/1433486315_435141.png)图片说明]...
  • 如果上传的文件体在HTTP消息中有损坏,可能造成SmartUpload组件读不到文件尾,又没有断链事件,程序就一直不停的循环读输入流(可能是空转,也可能真将输入读入内存),这就可能造成CPU占用率和内存占用率冲。...
  • 是java进程占用的,内部系统访问量很少(300不到)因此服务器出现cpu利用很不正常,日志方面并没太多错误记录,杀掉重启过一会cpu利用又飙升了,能达到500%像是陷入某种死循环,有人提到在git上面看到最近新...
  • 先查询进程 top 再根据进程号,查出进程的线程 ...得到最高使用率CPU的线程TID,转换成16进制 printf "%x\n" 3251 记住这个字符码 cb3,16进制就是0xcb3 再查,使用jstack工具查询 jstack -l [pid]  ...
  • linux java服务故障排查之 CPU 长期占用率的解决方法 有时候我们可能会遇到CPU一直占用过的...下面以定位Tomcat应用占用CPU过的问题为例,讲一下如何解决CPU占用问题 1>首选我们要确定top命令中 那个
  • 1. top命令查看CPU和内存...发现进程PID 35163 CPU和内存占用率都很 top - 06:13:47 up 5:31, 1 user, load average: 2.11, 2.07, 2.06 Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie Cpu0...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是用jstack导出的占用cpu高的线程信息"ajp-nio-8010-ClientPoller-1" daemon prio=6 tid=0x0000000008d68800 nid=0x1b1c runnable [0x000000000e4cf000]java.lang....
  • 最近线上的管理后台tomcat老是出现CPU的问题。 二、命令详解 CPU分析—jstack jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、...
  • 当多个用户访问的时候,服务器端的80端口就会被一直被连接占用着,导致服务器端的CPU很容易就飙升到100%。 连接数据库用的是tomcat连接池。 可能性分析: 80被长期占用,因为tomcat会启动连接池,注意是...
  • 当多个用户访问的时候,服务器端的80端口就会被一直被连接占用着,导致服务器端的CPU很容易就飙升到100%。 连接数据库用的是tomcat连接池。 [color=red]可能性分析[/color]: 80被长期占用,因为tomcat会启.....
  • 一、问题描述Linux服务器的配置是4核16G,将war包部署到tomcat后,启动tomcat,发现内存占用率,但是CPU一直高达100%;浏览器输入相关url也无法访问该项目,且tomcat的进程一直存在,程序的配置什么的都没问题啊...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

cpu占用率高tomcat