用JMap工具可以转储Java堆到快照文件,然后用MAT工具分析,只要是堆内问题,就用MAT工具。 可以详细查看Java堆内java对象占比 可多维度分析堆内对象分布,查找可疑的内存最大占比的对象。...GC异常分析与定位 现象: 业务偶尔出现超时现象 cpu负载很高 分析与解决: 超时或负载高很可能是GC异常表象,此时需要查看GC日志,结合实际业务,分析GC行为,找到GC异常根因。...存活对象多,则可能存在内存泄漏,可能是代码逻辑问题,进一步可用MAT工具分析Java对象。 OOM问题分析与定位 1....只要是Java堆或Metaspace区域内存泄漏,都可以转储Java堆快照文件,用MAT工具分析。 2. 多维度分析堆内对象分布,查找可疑内存最大占比的对象。 3.分析对象依赖路径,查找未释放原因。...最后heap dump 后使用MAT分析,发现一全局HashMap持有了大量重复对象, 业务代码里移除操作由问题,实际未移除,修复后问题解决。 例二. 某业务线迁移OSGI框架后,JVM无法响应外部
++在后面,所以先使用i,“使用”的含义就是i++这个表达式的值是0,但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做了++操作后再赋值的,所以最终结果还是0 让我们看的更清晰点: 这是java...这警示我们:不要在单个的表达式中对相同的变量赋值超过一次 让我们从字节码层次看一看,源码如下: 这里,我从第0行开始分析(分析中【】表示栈,栈的底端在左边,顶端在右边): ?
前言 有一天逛知乎的时候,遇到了这样的问题:面代码为什么i最后的结果是8?...public static void main(String[] args) { int i = 1; i += i += ++i + 2.6 + i; } 很简单的两行代码,如果是你遇到这样的问题...,你会怎样去把问题解释清楚?...将两行代码拷贝到Test.java中,执行以下指令将Java源代码转换成字节码: javac Test.java javap -c Test.class 字节码输出结果如下: 如果是之前对字节码没有了解的话...扩展应用 最近网上比较流行的一个问题,为什么Integet类型的100 == 100返回true,200 == 200返回false?众所周知,==比较的是两个对象的地址,为什么两个对象的地址能一样?
一、查看java进程 jps or ps aux | grep java 二、生成dump文件 jmap -dump:live,format=b,file=xxxx.bin 进程ID 三、查看dump...文件: jhat启动分析web服务: jhat -J-mx512m xxxx.bin Reading from xxxx.bin...
前言 之前线上有过一两次OOM的问题,但是每次定位问题都有点手足无措的感觉,刚好利用星期天,以测试环境为模版来学习一下Linux常用的几个排查问题的命令。...也可以帮助自己在以后的工作中快速的排查线上问题。...dump 日志分析 MAT(Memory Analyzer Tool),一个基于 Eclipse 的内存分析工具,是一个快速、功能丰富的 JAVA heap 分析工具,它可以帮助我们查找内存泄漏和减少内存消耗...和 基于Java内存dump文件分析解决内存泄漏问题 : https://www.jianshu.com/p/2cf7169ba1c4 jstack命令 printf '%x\n' tid --...CPU或者内存异常情况可以通过以下几步: 查看日志 查看CPU情况 查看TCP情况 查看java线程,jstack 查看java堆,jmap 通过MAT分析堆文件,寻找无法被回收的对象 参考: Java
下图是 Java 中处理 I/O 问题的接口: ?...由于现在大部分基础的 Java 框架或系统默认的字符集编码都是 ISO-8859-1,所以很容易出现乱码问题,后面将会分析不同的乱码形式是怎么出现的。...常见问题分析 在了解了 Java Web 中可能需要编码的地方后,下面看一下,当我们碰到一些乱码时,应该怎么处理这些问题?...接着介绍了 Java 那些地方会涉及到编码问题,已经 Java 中如何对编码的支持。...并以网络 I/O 为例重点介绍了 HTTP 请求中的存在编码的地方,以及 Tomcat 对 HTTP 协议的解析,最后分析了我们平常遇到的乱码问题出现的原因。
你可能一开始会比较畏惧使用复杂的工具去排查问题,又或者是打开了工具感觉无从下手,但是随着实践越来越多,对 Java 程序和各种框架的运作越来越熟悉,你会发现使用这些工具越来越顺手。...这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题。 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。...,我们就可以使用 JDK 提供的工具,来观察分析这个测试程序了。...抓取后可以使用类似fastthread(https://fastthread.io/)这样的在线分析工具来分析线程栈。...我们明明配置线程栈最大 256KB 啊,为什么会出现 4GB 这么夸张的数字呢,到底哪里出了问题呢?
,想找到是这个 java 程序的那个线程造成的问题,把问题反馈给开发让他们去修复。...下面所使用的容器镜像都是通过:Docker容器内执行 jvm 分析工具命令 文章内的打包方式构建的;如果你发现你的 jvm 参数不能使用,那么建议你参考我的 dockerfile 进行构建 分析过程 通过监控发现...那么开始分析是这个进程的那些线程出现的问题;因为我们服务都是封装在容器里,namespaces 和属主机上是隔离的,所以我们到容器里面去分析 docker exec -it A sh apk add openjdk8.../jstack_result.txt 命令(为Java进程的id号)来获取线程快照结果并输入到指定文件。...到此 docker 容器内分析 java cpu 使用率高的问题排查完成, 补充 在属主机上可以使用 top -Hp PID 来找线程使用 cpu 占用高的。
作者: 张首富 时间:2021-07-08 背景描述 我们目前所有的 java 服务都是封装在 docker 里面的,今天做压力容量测试的时候发现有个服务占用cpu 300%,想找到是这个 java 程序的那个线程造成的问题...,把问题反馈给开发让他们去修复。...那么开始分析是这个进程的那些线程出现的问题;因为我们服务都是封装在容器里,namespaces 和属主机上是隔离的,所以我们到容器里面去分析 docker exec -it A sh apk add openjdk8.../jstack_result.txt 命令(为Java进程的id号)来获取线程快照结果并输入到指定文件。...到此 docker 容器内分析 java cpu 使用率高的问题排查完成, 补充 在属主机上可以使用 top -Hp PID 来找线程使用 cpu 占用高的。
主要是在看 ArrayBlockingQueue 源码时,觉得它很简单,不就是通过加锁的方式来操作一个数组 items 么,有什么难的,所以就没有关注这个问题,所以它一问我懵逼了。...更多请参考博客【死磕Java并发】—–Java内存模型之重排序。 为什么说指令重排序会影响 items 的可见性呢?...两个线程在不加锁的情况对一个不具备线程安全的数组同时操作,很有可能会引发线程安全问题。 还有一种解释:缓存一致性。为了解决CPU处理速度以及读写主存速度不一致的问题,引入了 CPU 高速缓存。...虽然解决了速度问题,但是也带来了缓存一致性的问题。...推荐阅读: 【死磕Java并发】—–Java内存模型之重排序 【死磕Java并发】—–Java内存模型之从JMM角度分析DCL 【死磕Java并发】—–深入分析volatile的实现原理 【死磕Java
一、前言: 前几天解决了URLClassLoader内存泄漏的问题,但是解决问题就像剥洋葱,剥去了外层,内层 问题又暴露出来了。...当URLClassLoader内存泄漏解决, 需要解决的就是ZipFileIndex内存泄漏的问题了,而且这个问题折腾了我2天半的时间。...,用VisualVM分析堆Dump,发现com.sun.tools.javac.file.ZipFileIndex$Entry 类和实例内存占比特别高,仅居String之后,具体如下图: ?...ZipFileIndex内存占比依然很高(不知道我是哪设置有问题) 2、升级JDK版本,由Java8升级到Java9 花了两天时间,都没找到什么好的解决方案,于是我想到去Oracle/Java 的Bug...bug_id=8059976 升级Java 9 版本后,动态编译 ZipFileIndex不在出现。 问题完美解决。
上次说了full gc的解决方案,这次说说大家常见的内存溢出问题。 (一)JVM 内存溢出 ① 介绍 多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样。一起分析下。...问题的排查:应用程序日志的分析,JVM的日志。 最后给出解决方案。...③ 提前准备分析内存溢出问题解决 内存溢出后,设置了刚那个命令之后D盘就会生成一个快照,崩溃的时候内存里面到底放了什么东西,JVM挂掉了,需要进行解刨。快照需要打开的。 ?...上边的工具可以快速分析,比较好用的,直接了当的给出结论, ③ 线上解析准备分析内存溢出问题解决 jmap跟进程IP建立连接,jmap这个命令非常的消耗资源,内存占用也非常高,这也就是需要保留资源的原因,...jcmd 查看出来对应的PID 2.jmap -dump:live,formate=b,file=文件名称.hprof -F PID ④ 很多问题,其实可以通过测试Java VisualVM 虽然这个工具有远程功能
结合生产环境的一些案例,可能有些案例,你知道了,或者是听说过,可能你还不了解,一起说下,过下生产中的问题。 ?...不要stop the world,运行过程中犹豫GC导致的停顿,暂停,java代码运行不了,需要一定的时间进行垃圾回收。 打印gc的信息,filepath是日志的路径。...③ 案例分析 一个服务器部署了一个应用,这个应用有很多的功能,其中有个execl的表格读取。用到了一个jar,JXL。 pom.xml import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.WorkbookSettings; import java.io.File...jvm在做垃圾回收计算的时候,就不需要做任何分析直接就回收掉了。 PC:通过上边的代码应该可以明白,jvm在做回收统计的时候真得会一个一个统计的。
一起探讨下,线上问题的处理思路。 ? 问题合集 ① 请求一个API接口返回json数据,慢请求 发送请求后,返回非常的慢。之前很快,突然变慢了。...如何去分析,在公司经常出来问题,这个代码可能都不是你开发的。 测试工具模拟多个用户请求。 jcmd查看哪些程序在运行PID。 jstack PID 对于慢查询,线程的快照中可能残留,线程执行的内存。...如何分析,比第一个例子相对简单,其实打印的tack已经展示了问题。...很多买人买的云服务器,内存比较低,可能java进程突然就消失了,其实就是linux本身有个机制,超过内存值的时候就会kill。...在高并发的情况,一般都是需要提前做优化,做测试的,往往有时候大家的一些编码习惯导致的出其不意的问题。网络突然慢了,请求慢了,都可以按照这个思路来定位问题。
一、字符编码问题举例 1、支付宝代扣签约失败问题。 问题描述:用户在浏览器中输入中文请求,表单post给后台为中文乱码,导致通用代扣签约失败。...2、微博红包提现失败问题。...常用编码对比: 三、页面与服务器的交互编码 我们看一下 Java Web 中那些地方可能会存在编码转换?...六、常见问题分析 下面看一下,当我们碰到一些乱码时,应该怎么分析这些问题?...出现乱码问题的原因都是在转换中编码和解码的字符集不一致导致的,由于往往一次操作涉及到多次编解码,所以出现乱码时很难查找到底是哪个环节出现了问题,下面就几种常见的现象进行分析。
普通抽奖问题问题描述 用户随机抽奖,数据如下: // map中,key代表用户名,value代表成用户下单数 var users map[string]int64 = map[string]int64...{ "a": 10, "b": 6, "c": 3, "d": 12, "f": 1, } 思路 随机问题,一般就是通过随机函数从某个范围内随机取出某个数值,则该数值对应的就是中奖用户...在这里,如果我们能给map中每个元素设置对应的索引,即转化为数组,是不是就可以解决问题了呢?...: 数据结构和上面抽奖问题一致,只是这里,要求中奖概率和用户的订单数成正比 思路 ==本质==还是随机函数获得一个数值,数值对应的用户即获奖用户;这里要实现订单数对获奖概率的影响问题,即==订单数对应随机数的某个范围...,往往都有数学模型去对应,比如抽奖问题,就可以转化为初中所学习的数轴知识,画个草图,简单易理解,也不需要多高深的数学知识 问题本身并不难,重要的是转换思路,将抽象问题简化为具体的数学问题,然后去解决
ping 问题分析 ping 是什么 ping 是常用的网络管理命令,ping也属于一个通信协议,是TCP/IP协议的一部分,适用于windows和linux以及unix。...Ping不通ARP问题故障分析 通过前面的Ping不通故障定位思路可以判断出是否是由于ARP问题引起Ping不通。...Ping不通VLAN问题故障分析 通过前面的Ping不通故障定位思路可以判断出是否是由于VLAN问题引起Ping不通。...Ping不通路由问题故障分析 通过前面的Ping不通故障定位思路可以判断出是否是由于路由问题引起Ping不通。...常见访问控制判断方法如下: 在接口下进行抓包,分析获取报文的信息,然后查看相应的配置。
这里数据量实在是太大,主要是图片数据太大,因为历史表设计问题,所以图片是直接存储到数据库的。...Profile 这里显示正在分析那就没问题了,我们去网站上执行导出操作 实时查看CPU和堆内存 这里能看到这种情况是因为,我优化了一下,在每次处理完之后就手动GC一下,如果不手动GC大概处理三轮就OOM...了 这个也是我已经优化后的一种手段,后续我打算调高每次批量处理的阈值,提高单次处理效率 我们点击停止分析,就能看到下面的页面 分析结果 火焰图 火焰图(Flame graph)是一种可视化工具,用于分析和优化软件的性能...常用的性能分析工具包括Linux下的perf、Java应用程序中的Java Flight Recorder(JFR)和Java VisualVM等。...这样我们可以快速识别出调用次数较多或耗时较长的函数,从而找到可能的性能问题和优化的方向。
TCP问题分析 网络的五层协议 物理层 数据链路层 网络层,IP协议,ICMP协议(ping) 传输层,传输层有两个协议,面向连接的TCP和无连接的UDP,TCP是点对点的可靠连接,保证数据顺序必达...%来自前一个估计,而10%则取自新的测量 RTO(Retransmission TimeOut),这个是重传超时时间,也就是下重传消息需要等待Ack的时间,超过这个时间就再次发起下一次重传 TCP抓包分析.../system/bin/tcpdump chmod 777 /system/bin/tcpdump 到此为止,tcpdump就成功安装到了/system/bin/目录下,接着用如下命令还是抓包 Java...中的Socket异常分析 connection reset 在TCP消息协议包中,RST标志代表连接终止,对于应用层来说可能会报connection reset 当A发送一个消息包给B,但是迟迟没有收到...SocketException: Software caused connection abort 这个异常对于Android来说,是设备断网了,同时会有一个网络切换广播 socket closed 当java
领取专属 10元无门槛券
手把手带您无忧上云