![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 54
李大爷们
这个作者很懒,什么都没留下…
展开
-
通过dump文件,分析outOfMemoryError的排查过程和排查思路
前段时间发现有一个内存溢出导致java线上服务OOM的问题,通过jvm启动配置增加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/app/oom的命令,在出现了第二次服务挂掉的时候,拿到了当时的dump文件,以下是我通过dump文件对异常进行梳理的过程。首先,把服务器的dump文件拉到我本地后,使用jdk自带的jvisualvm装载dump文件在载入后,我得到了各个类的内存占用情况分析图。如下:在这个分析图表中,我发原创 2022-03-14 15:14:29 · 3896 阅读 · 1 评论 -
arthas java诊断工具入门应用和常见启动问题
1.何为arthas作为java开发工程师来说,不可避免会遇到的问题就是,在正式环境下你的java服务出现一些突发问题的快速排查,而排查时最难排查定位的问题莫过于一些内存溢出、cpu高占用和GC相关等异常。因此,一款能够快速通过堆栈、线程来快速定位正式环境线上问题点的工具就显得极为重要。而应运而生的arthas便是一款快速解决定位此类问题的工具,我们来看下arthas官方文档(官方文档:Arthas 用户文档 — Arthas 3.5.5 文档)对arthas工具的定位,了解下arthas的强大之处:原创 2021-12-17 11:26:10 · 6609 阅读 · 0 评论 -
服务器路由链路追踪命令
当我们在开发过程中,可能会有遇到项目的域名经过的网络路由跳转非常复杂的情况,其中跳转回牵扯到很多服务器,那么,我们如何去定位最终访问的域名跳转出口呢?我们可以使用tracert命令进行跟踪,此命令可以使用tracert+域名的方式来进行跟踪路由跳转,并且最终能够定位到域名跳转的出口。如图所示,最终的出口即为120开头的ip,即为你当前项目域名的ip出口。...原创 2021-05-19 15:57:56 · 3931 阅读 · 0 评论 -
springboot项目打包jar包后获得当前jar包层的路径
在开发过程中,我们经常要遇到上传图片、word、pdf等功能,但是当我们把项目打包发布到服务器上时,对应的很多存储路径的方法就会失效,而以下的方法则可以将我们想要的路径定位到对应的jar包当层的路径,个人觉得非常实用,记录一下与大家分享。//第一行代码的入参只要随便指定某个类即可。ApplicationHome home = new ApplicationHome(PdfUtils.class); String basePath= home.getSource().getParentFile().原创 2021-01-14 16:18:22 · 1100 阅读 · 0 评论 -
vue与后端接口是如何进行接口请求的原理
最近遇到一个很奇怪的问题:前端vue和后端java项目布在同一台服务器(假设该服务器为180服务器),该180服务器无法通过外网访问,前端通过另一台可ping通180服务器和连接外网的服务器(假设为181服务器)进行nginx外网映射访问。此时,我们的设计是希望前端通过内网IP直接对后端接口请求,而不是去走域名进行请求,这样能够在请求时少走一次防火墙,提供接口请求速度。 但是理想很美好,但是现实是最后发现,前端一直无法成功访问到后端接口,一直请求失败。经过多方排查和请教大佬,终于清楚的理解了前后端...原创 2020-11-18 11:40:58 · 8012 阅读 · 2 评论 -
分布式集群下session如何保证共享
解决集群Session共享问题的四个方案:1.Session Sticky实现:让负载均衡器能够根据每次的请求的会话标识来进行请求的转发,这样就能保证每次都能落到同一台服务器上面。存在的问题:如果这一台Web服务器宕机或者重启了,服务器上的会话数据会丢失,用户需要重新登陆等;会话标识是应用层的信息,那么负载均衡器要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层的解析,这个开销比第四层交换(LVS负载均衡器属于第四层)要大。负载均衡器变为一个有状态的节点,存消耗会更大,容灾方原创 2020-06-22 14:07:51 · 402 阅读 · 0 评论 -
java方法调用时如何在栈中执行的
java方法本质当我们调用某个java方法时,实际上是线程调用了它私有的虚拟机栈,将方法作为一个栈帧将其压入虚拟机栈中。栈帧中存放着该java方法中的局部基本类型变量、引用对象指向堆的地址,它本质是一个内存区块,里面存储着方法的数据集。一个方法从开始执行到执行完毕其实就对应该栈帧的入栈到出栈的过程。java方法的互相调用原理 当方法相互调用时,虚拟机栈又是怎么处理的呢?例如,有一个方法A,方法A调用了方法B,方法B调用了方法C。此时,当方法A开始执行调用时,它产生了一个栈帧S1,放入线程的...原创 2020-05-21 14:57:27 · 1670 阅读 · 0 评论 -
java final关键字修饰引用变量
当final修饰变量初始化为一个引用对象时,它的内存地址就指向了引用变量实例的堆地址,且不会改变。因此无论引用变量如何修改,fianl修饰的变量都会随之改变。具体例子如下:public class myTest { private static StringBuffer sb=new StringBuffer("blooze"); //为final修饰的变量初始化赋值给sb...原创 2020-03-24 14:46:08 · 2165 阅读 · 0 评论 -
java过滤器与拦截器的区别
1.拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。2.拦截器基于反射机制,而过滤器基于函数回调。3.拦截器只能对controller层的请求进行拦截(action请求),而无法对例如直接请求静态变量的请求进行拦截。而过滤器可以过滤任何请求。4.拦截器可以取到spring管理的各个bean(即可以取到@autowrite的实例),因此可以再拦截器中对业务进行操作。而...原创 2020-03-23 09:52:42 · 132 阅读 · 0 评论