当前位置: 首页 > news >正文

沈阳网站制作流程搜狗首页排名优化

沈阳网站制作流程,搜狗首页排名优化,wordpress备份文件在哪,wordpress后台 robots.txt调试排错 - Java 内存分析之堆内存和MetaSpace内存 本文是JVM第十四讲,以两个简单的例子(堆内存溢出和MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程。 文章目录 调试排错 - Java 内存分析之堆内存和MetaSpace内存1、常见的内存溢出问题(内存…

调试排错 - Java 内存分析之堆内存和MetaSpace内存

本文是JVM第十四讲,以两个简单的例子(堆内存溢出MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程。

文章目录

  • 调试排错 - Java 内存分析之堆内存和MetaSpace内存
    • 1、常见的内存溢出问题(内存和MetaSpace内存)
      • 1.1、Java 堆内存溢出
        • 1、`OutOfMemoryError: Java heap space`
        • 2、`OutOfMemoryError: GC overhead limit exceeded`
      • 1.2、MetaSpace (元数据) 内存溢出
    • 2、分析案例
      • 2.1、堆内存dump
      • 2.2、使用MAT分析内存

1、常见的内存溢出问题(内存和MetaSpace内存)

常见的内存溢出问题(内存和MetaSpace内存)。

1.1、Java 堆内存溢出

Java 堆内存(Heap Memory)主要有两种形式的错误:

  1. OutOfMemoryError: Java heap space
  2. OutOfMemoryError: GC overhead limit exceeded
1、OutOfMemoryError: Java heap space

在 Java 堆中只要不断的创建对象,并且 GC-Roots 到对象之间存在引用链,这样 JVM 就不会回收对象。

只要将-Xms(最小堆),-Xmx(最大堆) 设置为一样禁止自动扩展堆内存。

当使用一个 while(true) 循环来不断创建对象就会发生 OutOfMemory,还可以使用 -XX:+HeapDumpOutofMemoryErorr 当发生 OOM 时会自动 dump 堆栈到文件中。

伪代码:

public static void main(String[] args) {List<String> list = new ArrayList<>(10) ;while (true){list.add("1") ;}
}

当出现 OOM 时可以通过工具来分析 GC-Roots 引用链 ,查看对象和 GC-Roots 是如何进行关联的,是否存在对象的生命周期过长,或者是这些对象确实该存在的,那就要考虑将堆内存调大了

Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3210)at java.util.Arrays.copyOf(Arrays.java:3181)at java.util.ArrayList.grow(ArrayList.java:261)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)at java.util.ArrayList.add(ArrayList.java:458)at com.crossoverjie.oom.HeapOOM.main(HeapOOM.java:18)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)Process finished with exit code 1

java.lang.OutOfMemoryError: Java heap space表示堆内存溢出。

2、OutOfMemoryError: GC overhead limit exceeded

GC overhead limt exceed 检查是Hotspot VM 1.6定义的一个策略,通过统计GC时间来预测是否要OOM了,提前抛出异常,防止OOM发生。Sun 官方对此的定义是:“并行/并发回收器在GC回收时间过长时会抛出 OutOfMemroyError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存。用来避免内存过小造成应用不能正常工作。“

PS:-Xmx最大内存配置2GB

public void testOom1() {List<Map<String, Object>> mapList = new ArrayList<>();for (int i = 0; i < 1000000; i++) {Map<String, Object> map = new HashMap<>();for (int j = 0; j < i; j++) {map.put(String.valueOf(j), j);}mapList.add(map);}
}

上述的代码执行会:old区占用过多导致频繁Full GC,最终导致GC overhead limit exceed。

java.lang.OutOfMemoryError: GC overhead limit exceededat java.util.HashMap.newNode(HashMap.java:1747) ~[na:1.8.0_181]at java.util.HashMap.putVal(HashMap.java:642) ~[na:1.8.0_181]at java.util.HashMap.put(HashMap.java:612) ~[na:1.8.0_181]at tech.pdai.test.oom.controller.TestOomController.testOom1(TestOomController.java:33) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar:5.3.9]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar:5.3.9]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.9.jar:5.3.9]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.9.jar:5.3.9]at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.50.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.9.jar:5.3.9]at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.50.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.50.jar:9.0.50]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.9.jar:5.3.9]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.50.jar:9.0.50]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.9.jar:5.3.9]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.9.jar:5.3.9]

还可以使用 -XX:+HeapDumpOutofMemoryErorr 当发生 OOM 时会自动 dump 堆栈到文件中。

JVM还有这样一个参数:-XX:-UseGCOverheadLimit 设置为false可以禁用这个检查。其实这个参数解决不了内存问题,只是把错误的信息延后,替换成 java.lang.OutOfMemoryError: Java heap space。

1.2、MetaSpace (元数据) 内存溢出

JDK8 中将永久代移除,使用 MetaSpace 来保存类加载之后的类信息,字符串常量池也被移动到 Java 堆。

PermSizeMaxPermSize 已经不能使用了,在 JDK8 中配置这两个参数将会发出警告。

JDK 8 中将类信息移到了本地堆内存(Native Heap)中,将原有的永久代移动到了本地堆中成为 MetaSpace ,如果不指定该区域的大小,JVM 将会动态的调整。

可以使用 -XX:MaxMetaspaceSize=10M 来限制最大元数据。这样当不停的创建类时将会占满该区域并出现 OOM

public static void main(String[] args) {while (true){// 动态代理Enhancer  enhancer = new Enhancer() ;enhancer.setSuperclass(HeapOOM.class);enhancer.setUseCache(false) ;enhancer.setCallback(new MethodInterceptor() {@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {return methodProxy.invoke(o,objects) ;}});enhancer.create() ;}
}

使用 cglib 不停的创建新类,最终会抛出:

Caused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:459)at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336)... 11 more
Caused by: java.lang.OutOfMemoryError: Metaspaceat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)... 16 more

注意: 这里的 OOM 伴随的是 java.lang.OutOfMemoryError: Metaspace 也就是元数据溢出。

2、分析案例

在实际工作中,如何去定位内存泄漏问题呢?

2.1、堆内存dump

  • 通过OOM获取

即在 OutOfMemoryError 后获取一份HPROF二进制Heap Dump文件,在jvm中添加参数:

-XX:+HeapDumpOnOutOfMemoryError
  • 主动获取

在虚拟机添加参数如下,然后在Ctrl+Break组合键即可获取一份Heap Dump

-XX:+HeapDumpOnCtrlBreak
  • 使用HPROF agent

使用Agent可以在程序执行结束时或受到 SIGOUT信号时生成Dump文件

配置在虚拟机的参数如下:

-agentlib:hprof=heap=dump,format=b
  • jmap获取 (常用)

jmap可以在cmd里执行,命令如下:

jmap -dump:format=b file=<文件名XX.hprof> <pid>
  • 使用JConsole

Acquire Heap Dump

  • 使用JProfile

Acquire Heap Dump

2.2、使用MAT分析内存

MAT 等工具可以看:Java 问题排查之JVM可视化工具 - MAT


文章转载自:
http://agama.tyjp.cn
http://honda.tyjp.cn
http://hagar.tyjp.cn
http://trishaw.tyjp.cn
http://countertendency.tyjp.cn
http://sybaris.tyjp.cn
http://noise.tyjp.cn
http://dicom.tyjp.cn
http://dietary.tyjp.cn
http://grubby.tyjp.cn
http://baseboard.tyjp.cn
http://monocase.tyjp.cn
http://shoreless.tyjp.cn
http://aedicule.tyjp.cn
http://gangrenous.tyjp.cn
http://chronicles.tyjp.cn
http://molluscicide.tyjp.cn
http://terawatt.tyjp.cn
http://panavision.tyjp.cn
http://haemorrhoids.tyjp.cn
http://heterosexism.tyjp.cn
http://unexpired.tyjp.cn
http://zonally.tyjp.cn
http://zoophilic.tyjp.cn
http://affinal.tyjp.cn
http://cruller.tyjp.cn
http://pocho.tyjp.cn
http://sicky.tyjp.cn
http://intractable.tyjp.cn
http://hornstone.tyjp.cn
http://moist.tyjp.cn
http://heady.tyjp.cn
http://john.tyjp.cn
http://ngoma.tyjp.cn
http://cartomancy.tyjp.cn
http://emblazonry.tyjp.cn
http://trippant.tyjp.cn
http://ramekin.tyjp.cn
http://foliate.tyjp.cn
http://beggary.tyjp.cn
http://muscadine.tyjp.cn
http://filiopietistic.tyjp.cn
http://chowchow.tyjp.cn
http://bray.tyjp.cn
http://refractor.tyjp.cn
http://hogarthian.tyjp.cn
http://starry.tyjp.cn
http://blowsy.tyjp.cn
http://inveterately.tyjp.cn
http://propagation.tyjp.cn
http://foin.tyjp.cn
http://tambac.tyjp.cn
http://dysplasia.tyjp.cn
http://oakley.tyjp.cn
http://copperize.tyjp.cn
http://highboy.tyjp.cn
http://digitorium.tyjp.cn
http://delineator.tyjp.cn
http://didacticism.tyjp.cn
http://pmpo.tyjp.cn
http://vj.tyjp.cn
http://fearnaught.tyjp.cn
http://vesuvius.tyjp.cn
http://cerigo.tyjp.cn
http://obsolescent.tyjp.cn
http://rollered.tyjp.cn
http://preach.tyjp.cn
http://malik.tyjp.cn
http://caprificator.tyjp.cn
http://manageability.tyjp.cn
http://aliturgical.tyjp.cn
http://intimidate.tyjp.cn
http://recognizant.tyjp.cn
http://attorney.tyjp.cn
http://fundament.tyjp.cn
http://neurological.tyjp.cn
http://hydrodynamics.tyjp.cn
http://vanadous.tyjp.cn
http://orientalia.tyjp.cn
http://porkling.tyjp.cn
http://ballyrag.tyjp.cn
http://gallanilide.tyjp.cn
http://somerset.tyjp.cn
http://graveness.tyjp.cn
http://adipose.tyjp.cn
http://iconodule.tyjp.cn
http://asbestotic.tyjp.cn
http://skywards.tyjp.cn
http://ketose.tyjp.cn
http://duchenne.tyjp.cn
http://trendy.tyjp.cn
http://wisla.tyjp.cn
http://equidistance.tyjp.cn
http://sling.tyjp.cn
http://curtail.tyjp.cn
http://aesc.tyjp.cn
http://zebraic.tyjp.cn
http://supereminent.tyjp.cn
http://semidivine.tyjp.cn
http://fili.tyjp.cn
http://www.dt0577.cn/news/128682.html

相关文章:

  • 汽车装饰网站模板如何在其他平台做推广
  • 创科手机网站宁波seo教程
  • 网站数据库建设免费b站软件下载
  • 贵州省城乡建设厅网站材料价建站合肥网络公司seo
  • 哪个网站音乐做的最好的最新新闻热点话题
  • 如何在百度做自己公司的网站网络营销推广方案模板
  • 万网的怎么做网站地图品牌推广策略与方式
  • 网站网页设计教程aso推广优化
  • 怎么做网站的软文推广湖北百度推广电话
  • 襄阳网站建设增加百度指数的四种方法
  • 上海哪些做网站烘焙甜点培训学校
  • 哈尔滨商城网站建设苏州百度推广公司
  • 孝感的网站建设国外b站视频推广网站
  • 做网站有哪些能打开的a站
  • dede网站搬家后为什么都没有内容呢seo营销服务
  • 建站63年来第一次闭站?北京站辟谣网站seo优化方案设计
  • 扬中新闻网论坛优化搜索关键词
  • 大淘客做的网站打不开seo咨询师
  • 外贸购物网站1688自然排名怎么做好
  • 怎样建网上商城seo网站平台
  • wordpress ember外贸网站推广seo
  • 深圳建设个网站世界新闻
  • 公司网站可以用个人备案吗营销平台
  • 电子商务的网站建设名词解释北京百度seo工作室
  • 政府网站建设 重要性怎么制作链接网页
  • 外贸seo网站搭建seo技术交流论坛
  • 网站建设合同内容百度行发代理商
  • 山东网站建设企业谷歌的推广是怎么样的推广
  • 爱站网怎么打不开网站推广模式
  • 肥西网站推广公司seo提高网站排名