先来把上篇文章的ygc日志拿过来
看最后两行.Allocation Failure:表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
0.269代表ygc的时间。ParNew : 4030K->512K(4608K)4608K 表示:年轻代可用空间为4.5MB,一个eden+一个survivor区4030K->512K :对年轻代执行了一次GC,GC之前都使用了4030KB了,但是GC之后只有 512KB的对象 是存活下来的。0.0015734 secs:本次gc大概耗费了1.5ms,仅仅是回收3MB的对象而已。
4030K->574K(9728K), 0.0017518 secs,这段话指的是整个Java堆内存的情况
总可用空间9728KB(9.5MB),其实就是年轻代4.5MB+老年代5M,然后GC前整个Java堆 内存里使用了4030KB,GC之后Java堆内存使用了574KB。
[Times: user=0.00 sys=0.00, real=0.00 secs] 可以看,这里最小单位是小数点之后两位,但是这里全部是0.00 secs,也就是说本次gc就耗费 了几毫秒,所以从秒为单位来看,几乎是0。
第一个问题,看这行日志,ParNew: 4030K->512K(4608K), 0.0015734 secs
4608是新生代总大小 4.5MB 一个 eden+一个s区
大家很奇怪,我们在GC之前,明明在Eden区里就放了3个1MB的数组,一共是3MB,也就是3072KB的对象,那么GC 之前年轻代应该是使用了3072KB的内存啊,为啥是使用了4030KB的内存呢?
原因是:创建的数组本身虽然是1MB,但是为了存储这个数组,JVM内置还会附带一些其他信息,所以每个数组实际占 用的内存是大于1MB的;
然后ygc之后,新生代剩余512K的存活对象,从Eden区转移到了Survivor1区
这段日志是在JVM退出的时候打印出来的当前堆内存的使用情况
那么大家思考一下,此时在JVM退出之前,为什么年轻代占用了2.5MB的内存?
很简单,在gc之后,我们这不是通过如下代码又分配了一个2MB的数组吗:byte[] array2 = new byte[2 * 1024 * 1024];
所以此时在Eden区中一定会有一个2MB的数组,也就是2048KB,然后上次gc之后在From Survivor区中存活了一个 512KB的对象,大家也不知道是啥,先不用管他。
但是此时你疑惑了,2048KB + 512KB = 2560KB。
那为什么说年轻代使用了2601KB呢?
因为2MB的数组,还有对象的元数据,之前也说了,所以多出来的41kb就是元数据的大小。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
Azure 提供了一个 Application Insights 工具。 这个工具可以对 Spring Boot 项目中的 API 请求,日志进行分析。 你需要做的就是在你的 Spring Boot 项目中配置好依赖和参数后,Spring Boot 项目启动后就会自动将日志上传到 Azure 供分析。
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。
本篇文章所涉及到的demo练习 使用的 cloud 2021.0.3+ springboot2.6.8
Spring 的日志在输出的时候,出现了类似 -e[0;39m e[2m[ 的错误。
背景 在企业级的微服务环境中,跑着成百上千个服务都算是比较小的规模了。在生产环境上,日志扮演着很重要的角色,排查异常需要日志,性能优化需要日志,业务排查需要业务等等。然而在生产上跑着成百上千个服务,每个服务都只会简单的本地化存储,当需要日志协助排查问题时,很难找到日志所在的节点。也很难挖掘业务日志的数据价值。
之前两篇文章已经给大家分析清楚了对象是如何进入老年代的,接着我们就给大家演示一下,老年代的GC是如何触发的。
Java里的各种日志框架,相信大家都不陌生。Log4j/Log4j2/Logback/jboss logging等等,其实这些日志框架核心结构没什么区别,只是细节实现上和其性能上有所不同。本文带你从零开始,一步一步的设计一个日志框架
在 Java 中,有四种方法可以获取当前正在执行方法体的方法名称,分别是: 使用 Thread.currentThread().getStackTrace() 方法 使用异常对象的 getStackTrace() 方法 使用匿名内部类的 getClass().getEnclosingMethod() 方法 Java 9 的 Stack-Walking API 本文将根据以上四种方法来给大家进行具体讲解,不过不知道大家有没有想过,获取当前执行方法体的方法名称有什么用嘞? 它可以用于日志记录、异常处理、测试框架等方面。例如我们可以在方法的开始和结束时打印出当前方法名和参数,以便追踪程序的执行流程和性能。在介绍完以上四种方法后,就会给大家揭晓面试题答案。
本文主要讲MySQL:文件日志
意外掉电或硬关机系统后,有时会出现使用iscsiadm能正常查看Target设备,但无法挂载该设备的问题。(日志报告无法挂载或磁盘已挂载)
prtyaa 收益393.62元
zlj141319 收益218元
1843880570 收益214.2元
IT-feng 收益209.03元
风晓 收益208.24元
777 收益172.71元
Fhawking 收益106.6元
信创来了 收益105.84元
克里斯蒂亚诺诺 收益91.08元
技术-小陈 收益79.5元
扫一扫关注公众号
扫一扫加入交流群
加入交流群
请使用微信扫一扫!