JAVA企业应用【第五篇】TOMCAT监控

tomcat尽量使用ip_hash规则,这样同一ip的连接会在同一台机器上。

Tomcat性能优化

  • Jps
  • Jstack
  • Jmap

一、Jps

用来查看基于HotSpot JVM里面所有进程的具体状态,包括进程ID,进程启动的路径等等。
与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,
并显示他们的进程号。使用jps时,不需要传递进程号做为参数。
Jps也可以显示远程系统上的JAVA进程,这需要远程服务商开启了jstat服务,以及RMI注及服务,
不过常用都是对本地的JAVA进程的查看。
命令格式:
jps [options][hostid]
常用参数说明:
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
-v 输出传给JVM的参数。

常用命令:
查看进程ID:jps
查看程序启动路径等:jps -lvm

二、Jstack
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如果崩溃和在程序何处发生问题。另外,jstack工具还可以附属在正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

命令格式:
$jstack[option]pid
$jstack[option]executable core
$jstack[option][[email protected]]remote-hostname-or-IP

常用参数说明:
OPTIONS
-F jstack [-l] pid 无法响应时,强制打印堆栈
-l 长列表,打印关于锁的附加信息,例如属于 java.util.concurrent的ownable synchronizers列表
-m 混合模式输出(包括java和本地c/c++片段)堆栈。
pid: java应用程序的进程号,一般可以通过jps来获得;
executable:产生core dump的java可执行程序;
core:打印出的core文件;
remote-hostname-or-ip:远程debug服务器的名称或IP;
server-id:唯一id,假如一台主机上多个远程debug服务;

三、Jmap
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
可以输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本 。使用方法jmap -histo pid.
如果连用SHELL jmap -histo pid>a.log 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format =b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件中,再配合MAT(内存分析工具)(Memory Analysis Tool)或与jhat(Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。
64位机上使用需要使用如下方式:
jmap -J-d64 -heap pid
命令格式:
jmap [option]pid
jmap [option]executable core
jmap [option][[email protected]]remote-hostname-or-IP

参数说明
1)、options:
executable Java executable from which the core dump was produced.
(可能是产生core dump的java可执行程序)
core将被打印信息的core dump文件
remote-hostname-or-IP 远程debug服务的主机名或ip
server-id唯一id,假如一台主机上多个远程debug服务
2)、基本参数:
-dump:[live]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=.live子选项是可选的,
假如指定live选项,那么只输出活的对象到文件。
-finalizerinfo 打印正等候回收的对象的信息
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况
-histo[:live]打印每个class的实例数目,内存占用,类全名信息。VM的内部类名字开头会加上前缀"*".如果live子参数加上后,只统计活的对象数量。
-permstat打印classload和jvm head长久层的信息.包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量。另外,内部String的数量和占用内存数也会打印出来。
-F 强迫.在pid没有相应的时候使用-dump 或者-histo参数.在这个模式下,live子参数无效.
-h|-help 打印辅助信息
-J 传递参数给jmap启动的jvm.
pid需要被打印配相信息的java进程id

企业案例:JAVA进程占用CPU过高

  1. jps获取java进程的PID。
  2. jstack pid >> java.txt 导出CPU占用高进程的线程栈。
  3. top -H -p PID 查看对应进程的哪个线程占用CPU过高。
  4. echo “obase=16; PID”|bc 将进程的PID转换为16进制。
  5. 在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
  6. 分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
时间: 2024-10-08 09:46:12

JAVA企业应用【第五篇】TOMCAT监控的相关文章

JAVA企业应用【第二篇】TOMCAT安装

1.软件准备: JDK下载:http://www.oracle.comTomcat下载:http://tomcat.apache.org/ 2.部署java环境: mkdir -p /application/tools/ && cd /application/tools/ tar xf jdk-8u60-linux-x64.tar.gz -C /application/ ln -s /application/jdk1.8.0_60 /application/jdk sed -i.ori '

java学习(第五篇)包装类

一.Integer package com.test01; public class IntegerTest01 { public static void main(String[] args) { // TODO Auto-generated method stub Integer a=new Integer(1); //integer类在对象在包装了一个基本类型int的值 //上面为一种构造方法:以一个int型变量作为参数创建一个integer对象 Integer s=new Integer

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8

Spring Boot 揭秘与实战(五) 服务器篇 - Tomcat 代码配置

Spring Boot 内嵌的 Tomcat 服务器默认运行在 8080 端口.如果,我们需要修改Tomcat的端口,我们可以在 src/main/resources/application.properties 中配置Tomcat信息. server.port=8089 现在,你可以重新运行上面的例子,看下是不是 Tomcat 的端口变成 8089 了. 如果想直接通过代码配置 Tomcat, 可以直接定义 TomcatEmbeddedServletContainerFactory. 现在,我

Java进阶之欧拉工程 第十五篇【网格路径问题】

网格路径问题,中文翻译如下: 从 22的格子的左上角开始,只允许向右和向下移动,一共有六种路径可以抵达右下角 那么在2020的路径中一共有多少条这样的路径? 原题如下: Starting in the top left corner of a 22 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner. How many such

Java进阶之欧拉工程 第十五篇【2的1000次方各位之和为多少】

题目如下: 215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26. 21000 的各位数之和是多少? 原题如下: 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 解题思路:这道题和之前的大数求和的思想有点类似,就是用数组存储大数的每一位数,然后相加,上次写的大数相加的函数稍作

【 Zabbix 】— Tomcat监控及故障重启服务

一.监控tomcat原理 zabbix_server开启java poller,zabbix_java开启JavaGateway, 端口为:10052,tomcat JMX开启12345提供性能数据. 数据获取:java poller --> JavaGateway:10052 --> Tomcat:12345 二.安装tomcat tomcat的安装,网上很多教程. 三.配置Tomcat JMX 需要编辑tomcat下/bin/catalina.sh,加入配置: [[email protec

小码哥Java大神班五期 任小龙SSM Spring5 Mybatis SpringMVC

详情请交流  QQ  709639943 00.小码哥Java大神班五期 任小龙SSM Spring5 Mybatis SpringMVC 00.Python玩转人工智能框架 TensorFlow 00.web开发级mysql颠覆实战课程 00.微信小游戏入门与实战 刷爆朋友圈 00.四大维度解锁 Webpack 3.0 前端工程化 00.前端成长必经之路-组件化思维与技巧 京东金融 01.从天气项目看Spring Cloud微服务治理 02.Java项目实战--报表开发(JasperRepor

【Python五篇慢慢弹(5)】‘类’过依然继续前行,直至ending再出发

‘类’过依然继续前行,直至ending再出发 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pychar

Java企业微信开发_04_自定义菜单

一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 这里需要格外注意的是,企业微信中请求包的数据是Json字符串格式的,而不是xml格式.关于json序列化的问题请参考上一节   Java企业微信开发_03_通讯录同步 2.创建菜单的接口 public static String create_menu_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS