JVM启动速度大页内存验证

jvm,启动,速度,内存,验证 · 浏览次数 : 215

小编点评

**大页内存设置** **cat /proc/meminfo | grep -i huge** ``` HugePages_Total: 189440 HugePages_Free: 31725 HugePages_Rsvd: 16809 HugePages_Surp: 0 Hugepagesize: 2048 kB ``` ** creșterea部分系统设置内容:** * `vim /etc/security/limits.conf*` * `soft memlock unlimited*` * `hard memlock unlimited*` * `vm.nr_hugepages = 189440` **启动jvm参数:** ``` -XX:+UseLargePages -XX:LargePageSizeInBytes=2m -Xms48G -Xmx48G ``` **性能优化的思路:** * **内存分配方面:** * 优化内存分配算法,例如使用andoah 分配或 Zmalloc。 * **进程切换方面:** * 优化进程创建和切换的性能。 * **IO优化方面:** * 使用缓存和内存映射来减少网络与内存之间传输的次数。 * **池化资源优化方面:** * 使用内存池来减少内存分配的成本。 * **部分激进的内存处理调优方面:** * 使用 CPU 密集型内存(CPU-bound memory)技术来优化内存访问。 * **性能测试:** * 运行严格的性能测试,例如负载测试或并发测试,以验证性能提升。

正文

大页内存设置

先查看
cat /proc/meminfo |grep -i huge 
获取大页内存的大小信息. 

AnonHugePages:  42022912 kB
HugePages_Total:   158720
HugePages_Free:     1005
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

需要注意, 我这个里面带一个Oracle数据库.
所以在用大页都是Oracle数据库的. 

增加部分系统设置内容:
vim  /etc/security/limits.conf

*   soft    memlock         unlimited
*   hard    memlock         unlimited
*   soft    nofile         unlimited
*   hard    nofile         unlimited
*   soft    nproc         unlimited
*   hard    nproc         unlimited

大页内存的设置

增加设置信息
vim /etc/sysctl.conf
增加一行, 修改之前的配置
注意 因为默认页大小是 2MB 我增加60G的空间给JVM使用
本来是数据库服务器的资源使用较大:
vm.nr_hugepages = 189440
#vm.nr_hugepages = 158720
注释掉之前的数据 , 增加新的数值. 

注意需要使用 sysctl -p 的方式使之生效

注意 扩展 大页内存 需要耗时较久的时间
需要多等一下命令执行完成. 

jvm 启动参数的配置

在启动脚本里面增加内容为:

  -XX:+UseLargePages  -XX:LargePageSizeInBytes=2m -Xms48G -Xmx48G  

注意将大页内存设置为 48左右. 

现阶段大页内存的信息为:
HugePages_Total:   189440
HugePages_Free:    31725


修改端口避免有冲突进行启动jvm

nohup ./startup.sh >20230206.txt 2>&1 &

查看启动速度. 
注意修改大页之前的启动速度分别为:
824.045 seconds
787.267 seconds
777.949 seconds
修改脚本之后的启动速度为: 
826.263 seconds
790.765 seconds
851.384 seconds

发现大页内存的启动速度会变慢. 

注意 启动过程中可以观察 大页内存的使用. 
HugePages_Total:   189440
HugePages_Free:    22989
HugePages_Rsvd:    16809
HugePages_Surp:        0
Hugepagesize:       2048 kB


总结

启动速度会少许变慢. 
但是不知道性能有否提升, 需要进行一次严格的压测才可以.

感觉可以验证一下 在高并发情况下性能的情况. 
性能优化的思路 感觉至少在如下方面:
1. 内存分配方面.
2. 进程切换方面.
3. IO(网络和文件系统)优化方面.
4. 池化资源优化方面. 
5. 部分激进的内存处理调优方面. 

感觉以后可以从这些方面进行深入处理. 

与JVM启动速度大页内存验证相似的内容:

JVM启动速度大页内存验证

大页内存设置 先查看 cat /proc/meminfo |grep -i huge 获取大页内存的大小信息. AnonHugePages: 42022912 kB HugePages_Total: 158720 HugePages_Free: 1005 HugePages_Rsvd: 0 Huge

JVM启动参数脚本的再学习与研究

JVM启动参数脚本的再学习与研究 摘要 学无止境 前段时间一直再研究JVM参数调优. 但是最近也在想不应该仅研究如何调优. 因为不管怎么设置, 总有猪队友会把环境搞崩. 所以应该想办法在无人值守的情况下能够启动服务. systemd这种主流方式有时候不靠谱, 进程可能判断生死不准确. 所以还是想通过

[转帖]记录一次spring-boot程序内存泄露排查

现象 spring boot项目jvm启动配置-Xms4g -Xmx4g,然而很不幸的是程序所占的内存越来越高,都达到了12个多G,只能临时重启服务 常用命令 jstat -class PIDjstat -compiler PIDjstat -gc PIDjstat -gccapacity PIDj

[转帖]JVM(3)之垃圾回收(GC垃圾收集器+垃圾回收算法+安全点+记忆集与卡表+并发可达性分析......)

《深入理解java虚拟机》+宋红康老师+阳哥大厂面试题2总结整理 一、堆的结构组成 堆位于运行时数据区中是线程共享的。一个进程对应一个jvm实例。一个jvm实例对应一个运行时数据区。一个运行时数据区有一个堆空间。 java堆区在jvm启动的时候就被创建了,其空间大小也就被确定了(堆是jvm管理的最大

[转帖]使用MAT命令行工具生成堆dump分析文件

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html 写作目标 Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆

记录一次安装PIDtoolBox报缺少jvm.dll问题。

背景: 1.在安装PIDtoolBox时,报 安装程序错误 安装程序无法启动JVM。 could not find file C:\Users\AdministratorAppData\Local\MathWorks\app installer cache\R2018b\ win64vinstall

[转帖]java -jar 参数说明

jvm 选项 Java启动参数共分为三类; 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不

java通过idea启动查看类加载来源信息

本文为博主原创,转载请注明出处: jdk 8 环境时,可以在启动的环境中配置 :-XX:+TraceClassLoading 进行启动时查看 jdk 11 环境时,可以在启动的JVM 环境中配置 : -Xlog:class+load=info 进行查看 也可以 使用 : -verbose:class

[转帖]【JVM】常用虚拟机参数及实例

常用参数表 参数描述-XX:+PrintGC启动java虚拟机后,只要遇到gc,就打印日志-XX:+PrintGCDetailsgc发生时,打印更详细的日志-XX:+PrintHeapAtGC每一次GC后,都打印堆信息-XX:+PrintGCTimeStampsgc发生时,额外打印gc时间,该时间为

[转帖]JVM在SUSE下奔溃的原因

今天同事去厂商部署项目的时候发现项目启动一会便会奔溃,但是项目已经在其他的厂商和自己公司的云服务器上稳定运行了很长时间,且经过了大量严格的功能、并发测试,这让我有些诧异,通过了了解,知道了对方机器的操作系统为SUSE,同事发回了jvm奔溃时生成的hs_err_pid文件。通过查看hs_err_pid