JVM 性能监控与调优篇-3-GUI监控诊断工具
工具概述
命令行工具及其组合局限
无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等
要求用户登录到目标Java应用所在的宿主机上,使用起来不是很方便
分析数据通过终端输出,结果展示不够直观
GUI
jconsole
概述
从Java5开始JDK中自带java监控和管理控制台,用于对JVM中内存、线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监控工具。
启动
在jdk/bin目录下启动jconsole.exe即可,无需使用jps命令查询
连接方式
连接方式
说明
Local
使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。JConsole使用文件系统的授权通过RMI连接器连接到平台的MBean服务器上。这种从本地连接的监控能力只有Sun的JDK具有。
Remote
使用下面的URL通过RMI连接器连接到一个MX代理service:jmx:rmi://hostName:portNum/imxrmi。J ...
JVM 性能监控与调优篇-2-命令行监控诊断工具
查看正在运行的Java进程显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。
对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的,它是唯一的。
命令
12# 查看正在运行的Java进程jps [option] [hostid]
option
option参数
说明
-q
仅仅显示LVMID(local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等
-l
输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
-m
输出虚拟机进程启动时传递给主类main()的参数
-v
列出虚拟机进程启动时的JVM参数
如果某Java进程关闭默认开启的UsePerfData参数(即使用参数-XX :-UsePerfData),那么jps命令(以及jstat)将无法探知该Java进程。
hostid
RMI注册表中注册的主机名
如果想要远程监控主机上的java程序,需要安装jstatd
对于具有更严格的安全实践的网络场所而言,可能使 ...
JVM 性能监控与调优篇-1-调优概述
调优概述背景说明
生产环境中的问题
生产环境发生了内存溢出该如何处理
生产环境应该给服务器分配多少内存合适
如何对垃圾回收器的性能进行调优
生产环境CPU负载飙高该如何处理
生产环境应该给应用分配多少线程合适
不加log,如何确定请求是否执行了某一行代码
不加log,如何实时查看某个方法的入参与返回值
WHY 调优
防止OOM
解决OOM
减少Full GC出现频率
监控依据
运行日志
异常堆栈
GC日志
线程快照
堆转储快照
调优方向
合理编写代码
充分合理使用硬件资源
合理进行JVM调优
性能优化步骤性能监控(发现问题)它是一种以非强行或者入侵方式收集或查看应用运营性能数据的活动
监控通常是指一种在生产、质量评估或者开发环境下实施的带有预防或主动性的活动。当应用相关干系人提出性能问题却没有提供足够多的线索时,首先我们需要进行性能监控,随后是性能分析。
GC 频繁
CPU LOAD过高
OOM
内存泄漏
死锁
程序响应时间较长
性能分析(排查问题)它是一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性。性能分析是针对性能问题的答复结果,关注 ...
JVM 字节码与类的加载篇-4-类加载器
概述ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。至于它是否可以运行,则由Execution Engine决定。
类加载分类class文件的显式加载与隐式加载的方式是指JVM加载class文件到内存的方式
显式加载指的是在代码中通过调用ClassLoader加载class对象,如直接使用class.forName(name)或this.getclass().getclassLoader().loadclass()加载class对象。
隐式加载则是不直接在代码中调用ClassLoader的方法加载class对象,而是通过虚拟机自动加载到内存中,如在加载某个类的class文件时,该类的class文件中引用另外一个类的对象,此 ...
JVM 字节码与类的加载篇-3-类的加载过程
概述Java数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载
从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段:
从类的使用过程来看:
Loading加载完成的操作
加载
所谓是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型(类模板对象)。
类模板对象是Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中,这样JVM在运行期便能通过类模板而获取Java类中的任意信息,能够对Java类的成员变量进行遍历,能进行Java方法的调用。
反射的机制即基于这一基础,如果JVM没有将Java类的声明信息存储起来,则JVM在运行期也无法反射。
加载完成的操作
通过类的全名,获取类的二进制数据流
解析类的二进制数据流为方法区内的数据结构(Java类模型)
创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的访问入口
二进制流的获取方式
虚拟析可能通过文件系统读入.class ...
MySQL高级篇-19-数据库备份与恢复
物理备份与逻辑备份
物理备份:
备份数据文件,转储数据库物理文件到某一目录。物理备份恢复速度比较快,但占用空间比 较大,MySQL中可以用xtrabackup工具来进行物理备份
逻辑备份:
对数据库对象利用工具进行导出工作,汇总入备份文件内。逻辑备份恢复速度慢,但占用空 间小,更灵活。MySQL 中常用的逻辑备份工具为mysqldump。逻辑备份是备份sql语句,在恢复时执行备份的sql语句实现数据库数据的重现。
mysqldump 实现逻辑备份备份单个数据mysqldump命令执行时,可以将数据库备份成文本文件,该文件中实际上包含多个CREATE和INSERT语句,使用这些语句可以重新创建表和插入数据。
查出需要备份的表的结构,在文本文件中生成一个CREATE语句
将表中的所有记录转换成一条INSERT语句
1mysqldump –u 用户名称 –h 主机名称 –p密码 待备份的数据库名称[tbname, [tbname...]]> 备份文件名称.sql
备份全部数据库 若想用mysqldump备份整个实例,可以使用--all-databases或-A参数:
1 ...










