JVM第四篇之益处、常用java工具
1、StackOverFlowError:栈溢出
1)实例:下面代码报java.lang.StackOverError
public class StackeOverFlowTest{public static void main(String []args){new StackOverStackTest().testStackOver();
}public void testStackOver(){testStackOver();}}
2、其他的一些内存溢出
1)unable to create new native thread :栈本身是占用空间的,存放在Native Memory中,通过-Xss设置私有栈空间的大小,也就是对一个线程来将他的私有空间的最大的限制,若超出了这个大小,会报上述的错误
2)request{}byte for{}out of swap:基本是地址空间不够用,报该错误
3)IOEception:Too many open files:是由于有太多没有关闭的套接字导致的问题
3、常见的java工具
1)jps:jps是最简单的一种命令工具,仅仅过滤java本身的进程以及运行的引导类,jps是基于Java实现的,有点类似于下面的代码实现逻辑,代码中拿到虚拟机描述对象后,可以用过VirtualMachine.attach(des)来链接对应的服务器
public class JpsTest{public static void main(string [] args){List<VirtualMachineDescriptor> machineDescriptors = new VirtualMachine.list();for(VirtualMachineDescriptor des : machineDescriptors){System.out.prinln(des.id() + des.displayName());} }
}
2)jstat:用于快速的定位问题的一种方式,使用它可以方便看到JVM中每个区域的情况,根据不同的参数,看到每个区域的使用情况和比例,例如:jstat -gcutil<pid> 1000 2 ,其中<pid>代表进程号,1000代表每1000ms采集一次数据,最后一个参数2代表总共采集俩次数据
S0 |
S1 |
E |
O |
P |
YGC |
YGCT |
FGC |
FGCT |
GCT |
0.00 |
31.67 |
3.12 |
26.03 |
74.81 |
287 |
2.315 |
0 |
0.000 |
2.315 |
其中:S0、S1:俩个Survitor,E:Eden,O:Old,P:Perm,数字代表占的百分比,YGC、FGC:Minor GC、FULL GC的次数,YGCT、FGCT:俩种GC所用的总时间,GCT代表所有GC的时间
-gcutil可以换成-gccause、-gc、-gcnew、-gcnewcapacity、-calass、-compiler、-printcompilation等,查看不同的数据
3)jmap:使用dump内存时,系统会呗暂停,如果dump的一个超大的JVM内存的文件,普通的机器无法跑起来
a)jmap -heap<pid> :用于查看,某些OS上不支持
b)jmap -histo<pid>:输出活着的对象数以及大小,可以将其重定向到一个文件中
c)jmap -dump:format=b,file=heap.bin<pid>:导出JVM内存信息并形成二进制文件,都使用MAT工具分析
4)jstack:主要输出线程信息,例如:线程名称、地址、状态等
5)jinfo:查看某些运行时参数或者去做一些修改
6)JConsule:图形化工具,在具有图形化的OS命令行输入“jconsole”或者到JDK的bin目录下找到JSconsole五年级,双击运行
7)设置服务器用户名及密码:
a)Linux下在JAVA_HOME/jre/lib/management/目录下有个文件“jmxremote.password.template”(Windows下改为%JAVA_HOME%),复制一个,将template后缀删掉,将文件内容打开,去掉注释,该俩行是java默认额jmx用户及密码,同一目录下“jmxremote.access”文件,存在上诉的2个用户,可以在该文件里增加自己的用户
b)在启动JVM进程的启动参数上新增以下内容
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote=false |
c)客户端其动感JConsole,输入用户名和密码以及远程主机ip:port
d)修改“jmxremote.password”文件为 只读:Linux下使用root账号,修改完用户密码后将jmxremote.password文件属性设置为000也就是执行该命令:chmod 000 jmxremote.password,Windows下可以将jmxremote.password属性—》编辑—》安全 —》只读。
8)Visual VM :可以集成非常多工具的平台,在JDK的目录下运行“visualvm.exe”,安装插件时只需要关注Tools —》“Available Plugins”、“Installed”,
a)设置远程监控:编辑文件,例如文件名称为“visualvm.remote.policy”,可以放到任意的目录下,例如放在“/ux/security/“,文件内容如下:
grant codebase “file:${java.home}/../lib/tools.jar”{ permission java.security.AllPermission; } |
b)运行jstatd工具,如下命令:
Jstatd -J-Djava.policy=/ux/security/vosualvm.romote.policy -p 9000 |
c)若运行正常,则在对应的服务器上开启了9000端口,可以接受来自远程的Visual VM 工具访问
9)MAT:它是java的内存分析工具,分析的是JVM内存的dump文件,程序本身也是通过java写的
10)BTrace:程序出现问题时,可以将该问题类中的某个方法或写入过的数据的时候,将调用这个类的相应方法的“调用栈路径”打印出来。
a)内部实现:使用字节码增强技术来实现代码的跟踪,基于java的Attach API
11)HSDB:类似于Visual VM 集成了很多工具,只是它在命令行下使用
a)启动方式:java -classpath:$JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB,如果是windows,将$JAVA_HOME修改成%JAVA_HOME%
4、总结:
1)程序可控时,申请根小的内存可以做完的事情,不要申请多余的内存,但是要把握一个“度”
2)处理大数据量时,要分段来处理
3)处理大批量的肖I/O操作,尝试哟过批处理方式
4)局部代码块中已经申请了许多占用空间的对象,这些对象在其“作用域”内的后续代码块中还要执行很长时间,并且这块内存在后面不会在使用了,尝试着将一些大的对象设置为null
5)程序中的对象尽量缩小它的作用域
6)当应用中存在某些内存经常被用到,不会改变,但加载到内存代价比较大,在进程启动将其填充号,避免与业务代码中内存使用抢占Survivor空间
7)当某些数据中有Cache时,尽量使用它
8)当遇到一些反复叠加的操作,例如字符串的叠加,尝试使用一个外部引用变量或者是对象来操作,减少叠加过过程中产生的碎片
JVM第四篇之益处、常用java工具相关推荐
- MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法
MySQl学习(MySQL数据库,从入门到精通:第四篇--MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符 1. 算术运算符 1.加法与减法运算符 2.乘法与除法运算符 ...
- 常用java工具代码备忘
记录一些常用java工具代码,个人用,备忘 package com.szq.misc;import java.util.UUID;public enum MiscUtils {I;/*** 格式化UR ...
- Java多线程系列(四):4种常用Java线程锁的特点,性能比较、使用场景
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
- JVM 第四篇:可视化 JVM 故障处理工具
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 可视化工具 在 JDK 中为我们提供了大量的 JVM 故障处理工具,都在 JDK 的 bin 目录下: 这其中除了大量的命令行工具以外,还 ...
- 第四篇:ROS常用命令行指令【重点】
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.常用的ROS命令行指令 1.系统类指令 2.启动类指令 3.节点 ...
- SaltStack 学习笔记 - 第四篇: SaltStack常用模块
SaltStack 通过模块来实现管理,具备丰富的模块功能,命令形式也比较自由,这里通过罗列几个有用的命令来作为入门的学习实验. sys.doc : 类似linux的man命令,可以显示minion支 ...
- 常用Java工具类:java抽奖码生成
本案要求生成10W条由大写字母加数字组成的抽奖码. 由要求得字符集为:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 为保证数据不重复,且不可破解的要求.阿咚使用5位的随机字 ...
- 一些常用java工具类
1.json转换工具 package com.taotao.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPr ...
- MySQL数据库,从入门到精通:第十四篇——MySQL视图详解
MySQL数据库,从入门到精通:第十四篇--MySQL视图详解 第 14 篇_视图 1. 常见的数据库对象 2. 视图概述 2. 1 为什么使用视图? 2. 2 视图的理解 3. 创建视图 3. 1 ...
最新文章
- [SHOI2015]自动刷题机
- 为sap的alv的最左侧添加【选中】按钮用于同时选中多行...
- boost::signals2模块实现将参数从信号调用传递到槽的示例程序
- Python实现八皇后问题所有实现方式
- 最先进单插槽专业绘图解决方案
- 黑圈数字符号0到50复制_电脑上怎么打出特殊符号「收藏」
- 迁移学习中使用下载好的权重
- 高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)
- qpython3 安装库_qpython3如何安装库
- 角色与使命:学生干部如何平衡工作与学习的关系?
- 使用layer打开新页面
- 一位网友的网络求职经历
- 计算机网络技术期末考试2010模拟试题及答案
- uniapp修改字体
- 傅里叶变化,短时傅里叶分析,小波变换
- Gaussian Smoothing(高斯平滑)
- 71个外贸工具集合!2023年外贸业务员开发客户必备!
- Soundex UVA - 10260(soundex编码)(水)(略坑)
- e-learning的移动学习:培训从电脑转移到手机,只是媒介的改变?
- Android 控件 RecyclerView