首页 > 系统相关 >linux服务器运行java项目, 监控查看内存、储存空间和cpu占用率

linux服务器运行java项目, 监控查看内存、储存空间和cpu占用率

时间:2023-02-01 10:35:39浏览次数:61  
标签:CATALINA java tomcat 参考 内存 linux 堆栈 占用率 OPTS

    服务器部署方式为tomcat中运行war包的方式, 有一次重新部署时候发现报异常堆栈溢出了.
想要定位到某个war包中通过学习整理出此篇文章以作记录笔记.

1. 关于内存过高的情况

image

不要看到free很少就很慌或者used很高, 就以为内存爆了. 其实不是, 是因为Linux内存管理技术 -- 虚拟内存

参考1: Linux下Java项目占用内存问题的分析

参考2: tomcat内存占用过高_jvm疯狂吞占内存,罪魁祸首是谁?

2. 顺便检查储存空间是否足够

image

如果存储数据或缓存的分区过大, 可以给分区扩容或清理缓存的方法.

/dev/vda[数字]过大情况下可参考一下连接:

3. 内存堆栈信息 - jar(导出堆栈方式)

通过jps指令查看系统中运行的项目

image

如果还有tomcat运行包, 会多一条[pid] Bootstrap数据

(服务器测试时没有jar包的名称, 可能Bootstrap名称也会不同)

image

使用jmap -dump:format=b,file=wanfile.dump 21445导出堆栈文件, 并且下载到本地.

使用jvisualvm.exe 打开, 与java.exejavac.exe都在同目录%JSAVA_HOME/bin%

image

点击显示系统属性, 可以查看到当前的jar包运行的参数, 包括当前jar包的名称.

之后我也将Bootstrap也下载了下来

image

: 可以查看堆栈中的类信息, 主要查看自己定义的类的实例数和ArrayList是否过高

注: java11包括java11之后的版本不再提供jvisualvm.exe, 有需要的话可以在VisualVM: Download 下载.

参考1: linux环境下导出项目的堆栈dump文件

参考2: jvisualvm.exe使用介绍


memory analyzer软件工具分析堆栈文件

如果常用jdk(系统变量path中配置的)是java8的话, 由于此工具要求jdk版本是java11+, 所以需要手动配置java11, 在MemoryAnalyzer.exe同目录下的MemoryAnalyzer.ini配置文件中最前面添加-vm path:

-vm
C:\Program\Java\java-11\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.400.v20211117-0650
-vmargs
-Xmx1024m

参考1: 官网下载地址

参考2: MemoryAnalyzer指定JDK版本

参考3: Memory Analyzer基本使用

参考4: 一文让你理解什么是shallow heap及retained heap

4. 内存堆栈信息 - jar(在线监控)

只需要使用java指令启动时候添加5中那些-D参数即可

5. 内存堆栈信息 - tomcat

tomcat中的各个war的运行情况暂时无法分开查看

  • 目标tomcatbin目录下的catalina.sh文件内添加

    # 1.之前是写到一行, 但是启动有问题, 后面拆开多行成功
    # 2.hostname填写ip或者域名
    # 3.port使用的是与tomcat或docker相同的端口(尝试使用不同的未能成功, 于参考4中发现)
    # 4.authenticate代表是否需要鉴权
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote=true"
    CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=[ip or servername]"
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=80"
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
    
  • 打开软件visualvm, 右键打开Add Remote Host...

    image

    • 输入hostname, 目标服务器的ip或域名, 点击OK

      image

    • 右键新添加的远程主机, 点击Add JMX Connection...

      image

    • 填写上接口, 同服务器配置中的port

    • 如果配置上jmxremote.authenticate=true, 需要填写上配置的用户名和密码

    • 勾选上不需要SSL连接, 同配置中的jmxremote.ssl=false

      image

    • 点击OK后其下会出现下图所示

      image

    • 双击上图箭头所指位置, 右侧窗口中可看到具体内容

  • visualvm功能可在官网上的FeaturesDocumentation进行查阅.

    参考1: jvisualvm.exe使用

    参考2: VisualVM详解

    参考3: jvisualvm 监控 tomcat 实例(qbit)

    参考4: Has anyone ever got a remote JMX JConsole to work?

    参考5: jvisualvm之jmx远程连接

    参考6: java jmx jboss_通过JMX远程监控

标签:CATALINA,java,tomcat,参考,内存,linux,堆栈,占用率,OPTS
From: https://www.cnblogs.com/Ddlm2wxm/p/17081722.html

相关文章

  • Linux创建新用户并配置远程连接
    useraddz #创建用户ztail-f/var/log/audit/audit.log#查看登录日志sudovi/etc/sudoers#查看权限,并修改权限  #增加sudo到root权限“#inc......
  • java泛型和类型擦除
    java泛型和类型擦除泛型的本质是参数化类型,这种参数类型可以用在类、接口和方法的创建中。泛型是在JAVA1.5版本中才引入的,它能和以前的版本兼容的原因是泛型信息只存在于......
  • Linux创建文件报错:/bin/bash^M: bad interpreter
    在使用Linux创建好文件shell文件之后,发生了这样一个错误:/bin/bash^M:badinterpreter查找资料后发现:在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即......
  • Java中Set里remove详解
    例如1HashSetset=newHashSet();2Personp1=newPerson(1001,"AA");3Personp2=newPerson(1002,"BB");4set.add(p1);5set.add(p2);6p1.name=......
  • 【Javaweb】什么是Listener监听器?
    1、Listener监听器它是Javaweb的三大组件之一。Javaweb的三大组件分别是:Servelt程序,Filter过滤器,Listener监听器。2、Listener它是JavaEE的规范,就是接口3、监听器的作用......
  • 【Javaweb】jsp | 简单学习
    什么是jsp,它有什么用?jsp的全称是javaserverpages。Java的服务器界面。jsp的主要作用是代替Servlet程序回传html页面的数据因为Servlet程序回传html页面数据是一件非常......
  • Linux服务器中文乱码的问题
    Linux服务器系统的CentOS7文件名是中文全是?的乱码,执行 locale查看编码格式,内容如下[root@iZ2ze3n2wuzr91sx0vgwwdZ~]#localelocale:CannotsetLC_ALLtodefau......
  • 【Javaweb】JavaEE项目的三层架构 | 快速搭建
    逻辑类图  分层的目的是为了解耦。解耦就是为了降低代码的耦合度。方便项目后期的维护和升级。不同的层有不同的包web层com.stguigu.web/servlet/con......
  • 极客时间 Java并发编程实战 笔记
    思考、再思考、总结、再总结01可见性、原子性和有序性举几个例子先。缓存可能导致可见性问题,因为多核CPU上的多个核可能都持有同一数据的不同缓存。两个线程并行地对......
  • linux中memset作用,为什么要用memset
    光脚赤膊于2010-03-2814:36:08发表:“用处是大面积赋值,速度快!”所谓“初始化”,当然是指将你定义的变量或申请的空间赋予你所期望的值,例如语句inti=0;就表明定义了一......