精华内容
下载资源
问答
  • 项目上线后运行一段时间,突然发现cpu 8个逻辑核心...查找哪些进程在耗cpu 进入服务器,top 命令看一下,发现进程6633占用了800% [root@3server ~]# top 2.把进程的栈dump到文件里,以便后面的分析 [root@3serve...
    项目上线后运行一段时间,突然发现cpu 8个逻辑核心都占用100%,心情很紧张,然后就在网上找了一些解决方法,具体如下: 
    
           1.查找哪些进程在耗cpu  
           进入服务器,top 命令看一下,发现进程6633占用了800% 
            [root@3server ~]# top 
           2.把进程的栈dump到文件里,以便后面的分析
            [root@3server ~]# jstack 6633 > cpu1128.log 
           3.看看这个进程里面哪些线程在占用cpu 
            [root@3server ~]# top -p 6633 -H 
           一大片占用cpu很高的线程,选一个最高的吧,PID=5159 
           4.接着要看刚才dump出来的cpu日志了,里面会有6633这个进程下面每个线程的栈信息,但是是十六进制显示的,所以先把5159转换成16进制 
            [root@3server ~]# printf "%0x\n" 5159 
           [root@3server ~]# 1427 
           5.在cpu日志里找PID=1427的线程 

           [root@3server ~]# vi cpu1128.log

      cpu1128.log         6.分析原因
                看日志,很明显是org.hibernate.exception.ExceptionUtils.getCauseUsingWellKnowTypes(...)这里“卡住”了。这个线程是"RUNABLE"状态的,难道在这里发生了死循环?后来花了很多时间在debug状态下把这个问题重现了(Hibernate 3.3.1.GA版本,通过hessian调用远程服务器报SQLGrammarException异常,就会出现这个问题)。跟踪到hibernate源码里发现了问题:

                 

    Java代码   收藏代码
    1. public static int getThrowableCount(Throwable throwable) {  
    2.         int count = 0;  
    3.         while ( throwable != null ) {  
    4.             count++;  
    5.             throwable = ExceptionUtils.getCause( throwable );  
    6.         }  
    7.         return count;  
    8. }  

             这个方法里,throwable和它的cause引用的同一个SQLGrammarException对象,导致在while这里产生了死循环。这肯定是hibernate的bug了。于是把hibernate升级到3.3.2.GA(原来是3.3.1.GA,不敢升太多)问题解决。



    结合另一篇文章分析:https://www.jianshu.com/p/3667157d63bb

    jstack 14063 |grep 36f1 -A 30  14063指的是java进程
    展开全文
  • java 服务器 cpu负载过高原因汇总

    千次阅读 2019-08-26 09:08:06
    cpu 负载:

    cpu消耗过高的常见原因如下:
    1.编码逻辑问题,导致死循环
    2.程序在运行过程中产生大量生命周期长/无法回收的对象,导致GC线程就不断GC,占用CPU
    3.使用非线程安全类 例如 HashMap rehash会出现死循环

    cpu消耗过高排查过程:
    1.找出机器上高负载的进程,可使用top
    2.定位问题线程,查看问题进程执行情况,可用ps -mp pid -o THREAD,tid,time
    3.将进程id转换为16进制,可用printf ‘%x\n’ pid,因为java堆栈中的进程号是16进制,转化后便于查找
    4.使用jstack打印堆栈信息,从中找出对应进程,进而找到对应的执行类
    5.审核执行类代码

    本文参考以下文献:
    https://blog.csdn.net/GX_1_11_real/article/details/80242858
    https://www.jianshu.com/p/6d573e42310a 这篇文章有通过进程的运行状态进行分析
    https://juejin.im/post/5a66a08d5188253dc3321da0 hashMap 多线程调用产生死循环分析

    展开全文
  • java利用sigar监控服务器cpu、内存等性能值

    千次阅读 热门讨论 2019-05-16 10:01:16
    今天来了个需求,需要实时监控服务器cpu跟内存参数的占用百分比。 还没开始前首要想到的是用java执行linux命令:cat /proc/meminfo 这里面内存具体信息啥都有,查看cpu的话最常用的就是top+p。 想了一通下来,...

    前言

    今天来了个需求,需要实时监控服务器cpu跟内存参数的占用百分比。

    还没开始前首要想到的是用java执行linux命令:cat /proc/meminfo

    这里面内存具体信息啥都有,查看cpu的话最常用的就是top+p。

    想了一通下来,这样做出来好恶心啊...

     

    sigar

    搜了一下性能监控方面的资料,看到一个sigar,我之前没接触过sigar,看很多博文都把这个牛逼吹天上去了。

    既然这么厉害,那就搞一下呗~

     

    maven

    <sigar.version>1.6.4</sigar.version>
    <dependency>
        <groupId>org.fusesource</groupId>
        <artifactId>sigar</artifactId>
        <version>${sigar.version}</version>
    </dependency>

     

    引入需要的文件

    这里插一嘴,因为sigar最恶心的一点就是需要用它的话。

    windows就要在jdk的bin里面加上它的dll文件,linux也同样需要.so文件。

    sigar的jar包及win、linux的dll文件.zip

    这里开始直接就在加载类的时候把需要的都动态加到环境变量了,提前把需要的东西都集成到项目里。

    sigarPackages

     

    代码层实现

    
    import com.mdm.skr.mdm_common.utils.PropertiesUtil;
    import com.skr.mdm.projectBegin.ProjectBegin;
    import org.hyperic.sigar.*;
    
    import java.io.File;
    import java.nio.file.Paths;
    import java.text.DecimalFormat;
    
    /**
     * 监控系统的工具类
     * @author 954
     */
    public class SysStatusUtil {
    
        static {
            try {
                String classPath = SysStatusUtil.class.getClassLoader().getResource("").getPath().concat("sigarPackages");
                String path = System.getProperty("java.library.path");
                String osName = System.getProperty("os.name").toLowerCase();
                path += osName.contains("windows") ? ";".concat(classPath) :
                        osName.contains("linux") ? ":".concat(classPath) : "" ;
                System.setProperty("java.library.path", path);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 更新系统状态配置内容
         */
        public static void updateSysStatus() throws SigarException {
            SysStatusData statusData = new SysStatusData();
            CpuPerc perc = statusData.getPerc();
            // 获取cpu使用率
            String sysCpuUsed = CpuPerc.format(perc.getSys());
            // 获取内存使用率
            Mem mem = statusData.getMem();
            String sysMemoryUsed = new DecimalFormat("0.0%").format(
                    Double.valueOf(mem.getUsed()) / Double.valueOf(mem.getTotal()));
            // 更改资源文件
            PropertiesUtil.setProperty("sysStatus","cpuUsed",sysCpuUsed) ;
            PropertiesUtil.setProperty("sysStatus","memoryUsed",sysMemoryUsed) ;
        }
    
    }
    

     

    
    import lombok.Getter;
    import org.hyperic.sigar.*;
    
    @Getter
    public class SysStatusData {
    
        // cpu信息
        private CpuInfo info;
        private CpuPerc perc;
        private Cpu timer;
        private CpuPerc[] cpuPercList ;
    
        // 内存信息
        private Mem mem ;
    
        public SysStatusData() throws SigarException {
            Sigar sigar = new Sigar();
            this.info = sigar.getCpuInfoList()[0];
            this.perc = sigar.getCpuPerc();
            this.cpuPercList = sigar.getCpuPercList();
            this.timer = sigar.getCpu();
            this.mem = sigar.getMem() ;
        }
    
    }
    

     

    页面demo效果(经过测试,这个参数值还是挺准的)

    sigar的强大可不仅仅是获取cpu跟内存这么鸡肋,强大到各种服务器性能网络状态以及硬盘等都给你扒出来,还是很好用的。

     

     

    对你有帮助的话,右上角给个赞呗~

     

    展开全文
  • java获取服务器cpu和内存使用率

    千次阅读 2018-08-01 14:22:06
    使用的是sigar.jar包 ... 使用方法这三个文件放到jdk安装目录的bin下; Sigar sigar = new Sigar(); Mem mem = sigar.getMem();... CpuPerc cpu = sigar.getCpuPerc(); CpuInfo infos[] = sigar.getCpuI...

    使用的是sigar.jar包

    sigar.jar下载地址密码1j2r

    使用方法这三个文件放到jdk安装目录的bin下;

    Sigar sigar = new Sigar();
    			Mem mem = sigar.getMem();
                CpuPerc cpu = sigar.getCpuPerc();
    			CpuInfo infos[] = sigar.getCpuInfoList();
    			CpuPerc cpuList[] = null;

    使用sigar这个对象获取内容

     

    展开全文
  • Java项目服务器cpu占用100%解决办法

    千次阅读 2017-07-07 14:01:01
    项目上线后运行一段时间,突然发现cpu 8个逻辑核心都占用100%,心情很紧张,... 进入服务器,top 命令看一下,发现进程6633占用了800%   [root@3server ~]# top   2.把进程的栈dump到文件里,以便后面的分析  [r
  • 主要介绍了Java实现获取cpu、内存、硬盘、网络等信息的方法,涉及java使用第三方jar包针对本机硬件的cpu、内存、硬盘、网络信息等的读取相关操作技巧,需要的朋友可以参考下
  • Java获取服务器CPU、内存、磁盘、系统信息新建CPU类存放CPU信息新建磁盘类存放磁盘信息新建内存类存内存信息新建系统类存系统信息最后新建服务器类整合所有信息例行测试 导入依赖 <!-- 获取系统信息 --> <...
  • 主要介绍了java获取服务器基本信息的方法,涉及java获取系统CPU、内存及操作系统等相关信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)
  • JAVA cpu温度源码

    2013-10-11 14:56:55
    cpu温度的数值由主板驱动供给windows,目前的现状是许多PC兼容机不提供或没安装“专用的主板驱动”(比如大量的ghost集成装机),连win都没法获知温度,更别提win之上的Java。 原文连接...
  • Java 服务器信息监控

    热门讨论 2012-10-09 15:27:18
    这是java做的服务器监控程序,支持多系统如window,Linux等主流系统,可监控物理内存,cpu,网络连接,服务等
  • java导致cpu上升检测步骤

    千次阅读 2018-06-05 14:34:50
    参考:https://www.cnblogs.com/paul8339/p/7464206.html近期java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下。方法一:转载:http://www.linuxhot.com/java-cpu-used-high.html1.jps ...
  • Java应用中CPU使用率过高该怎么解决

    万次阅读 2018-10-15 17:42:51
    JAVA策略当中,Java应用中CPU使用率过高我们该怎么办呢?我们需要时刻清楚排查java应用中CPU使用率高或内存占用高这类问题,其实在整个运行过程中,排查步骤基本都是差不多的。当然了我们最好还是通过风月体验网中...
  • java应用cpu使用率过高问题排查

    万次阅读 多人点赞 2018-07-18 23:59:59
    1、先通过top命令找到消耗cpu很高的进程id假设是123 2、执行top -p 123单独监控该进程 3、在第2步的监控界面输入H,获取当前进程下的所有线程信息 4、找到消耗cpu特别高的线程编号,假设是123 5、...
  • 最近我部署在centos7上的一个项目出现了CPU达到了100%+的状态,导致项目崩溃,起初没重视,直接重启项目解决,后面项目运行了几天服务器又报警100%+了,这个时候我才意识到项目问题的严重性。然后开始查找原因,查看...
  • 通过Java程序获取Windows/Linux系统的CPU信息、内存信息、硬盘信息、网络信息、操作系统信息等。
  • Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
  •  前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...
  • 在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了最后的解决方法: 1.找到java进程对应的pid。 找pid的方法是:打开任务管理器,然后点击 “查看” 菜单,然后点击 “选择列”,把pid...
  • Java服务,CPU100%问题如何快速定位?

    万次阅读 多人点赞 2019-11-04 19:15:00
    假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?简要步骤如下:(1)找到最耗CPU的进程;...
  •  * 服务器信息   */   @RequestMapping(value = "")   public void serverInfo(HttpServletResponse response) {   Properties props = System.getProperties();   Map, String> map =...
  • 利用java获取Linux服务器CPU、内存、磁盘IO、网络带宽使用率 原创 2013年03月30日 21:34:39 标签:
  • java获取服务器CPU,内存,硬盘使用量

    千次阅读 2015-11-06 15:30:01
    /** * * * @author wenkaixuan * @version [版本号, 2012-5-9] * @see [相关类/方法] * @since [产品/模块版本] */ public class GetSystemInfo { private static final int CPUTIME = ...
  • 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。 2、CPU占用过高问题定位 2.1、定位问题进程 使用top命令查看资源占用情况,发现pid...
  • java利用sigar模块实现监控服务器运行状态,资料包含win和linux dll动态库和案例代码。
  • Java知识体系最强总结(2021版)

    万次阅读 多人点赞 2019-12-18 10:09:56
    本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同...
  • java监控linux服务器CPU,内存等信息

    千次阅读 2017-07-18 14:51:56
    最近公司在做爬虫系统,我接到一个需求是获取服务器CPU,内存等信息。一开始我打算通过linux shell获取然后输出到文件,java读取文件获得。后来回想一切皆文件的linux应该本来就有记录在文件中,经过查找资料,找到了...
  • java获取cpu核数

    千次阅读 2019-09-04 19:23:09
    Runtime.getRuntime().availableProcessors()

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,221
精华内容 83,688
关键字:

java服务器cpu

java 订阅