- 博客(9)
- 收藏
- 关注
转载 JVM参数调优
任何新的业务系统在上线以前都需要去估算服务器配置和 JVM 的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的,需要根据系统所在业务场景去估算,推断出来一个系统运行模型,评估 JVM 性能和 GC 频率等等指标。以下是我结合大牛经验以及自身实践来总结出来的一个建模步骤:计算业务系统每秒钟创建的对象会佔用多大的内存空间,然后计算集群下的每个系统每秒的内存佔用空间(对象创建速度);设置一个机器配置,估算新生代的空间,比较不同新生代大小之下,多久触发一次 MinorGC;
2023-03-24 16:07:05
252
原创 记一次线上OutOfMemoryError: unable to create new native thread
进入后发现一个线程池对象占用了51%,而且是CompletableFuture的默认线程池,再深入就发现原来是在开启线程时往新线程中放入了一个大对象,由于商品又是访问量比较大的模块,就导致了多线程中大对象一直堆叠的情况。上次堆内存过高的优化方案是:不将大对象传入线程中,而是在只传对象id,在线程中查出需要的对象后再到主线程赋值。发现全是WAITING状态的线程 ,且是LinkedBlockingQueue.take导致的,想到服务中自定义的线程池用的就是LinkedBlockingQueue。
2023-03-23 12:02:39
237
原创 记一次线上JVM内存占用率过高导致服务超时
进入后发现一个线程池对象占用了51%,而且是CompletableFuture的默认线程池,再深入就发现原来是在开启线程时往新线程中放入了一个大对象,由于商品又是访问量比较大的模块,就导致了多线程中大对象一直堆叠的情况。当时看到full gc次数是5,时间是2.13秒,感觉是full gc导致的服务超时(后面发现其实不是),于是使用jmap -dump命令把dump文件导出,并使用eclipse mat进行分析。优化方向就是不将大对象传入线程中,而是在只传对象id,在线程中查出需要的对象后再到主线程赋值。
2023-03-23 00:12:47
434
原创 如何优雅的判断null
一、使用Java的函数式编程接口OptionalOptional接口本质是个容器,你可以将你可能为 null的变量交由它进行托管,这样我们就不用显式对原变量进行 null值检测,防止出现各种空指针异常。Optional语法专治上面的俄罗斯套娃式 if 判空,因此代码可以重构如下:public String getStreetName( Province province ) { return Optional.ofNullable( province ) .map(
2022-02-08 21:40:07
1593
1
转载 MySQL并发insert导致的dead lock解决方法
线上某业务最近经常会出现dead lock,相关信息如下:2016-06-15 20:28:257f72c0043700InnoDB: transactions deadlock detected, dumping detailed information. 2016-06-15 20:28:25 7f72c0043700*** (1) TRANSACTION:TRANSACTION 151506716, ACTIVE 30 sec insertingmysql tables in...
2022-02-08 21:18:11
4683
原创 Linux执行sh脚本时找不到profile文件解决方法
在Linux下执行sh脚本文件时报错:No such file or directoryofile
2021-12-14 19:04:47
2862
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人