查看服务器当前内存和cpu使用率
echo "==== CPU 和内存使用率 ====" \
&& top -bn1 | grep "Cpu(s)" | awk '{print "CPU使用率: " 100 - $8 "%"}' \
&& free -m | awk 'NR==2{printf "内存使用率: %.2f%%\n", ($3/$2)*100}'查看服务器当前内存和cpu使用率
echo "==== CPU 和内存使用率 ====" \
&& top -bn1 | grep "Cpu(s)" | awk '{print "CPU使用率: " 100 - $8 "%"}' \
&& free -m | awk 'NR==2{printf "内存使用率: %.2f%%\n", ($3/$2)*100}'Flutter assembleDebug编译缓慢 2025有效
settings.gradle.kts 修改
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
maven("https://maven.aliyun.com/repository/public") // 阿里云镜像
maven("https://maven.aliyun.com/repository/central") // Central 仓库镜像
maven("https://maven.aliyun.com/repository/gradle-plugin") // Gradle 插件镜像
mavenCentral()
gradlePluginPortal()
}
}build.gradle.kts 修改
allprojects {
repositories {
maven("https://maven.aliyun.com/repository/public")
maven("https://maven.aliyun.com/repository/central")
google()
mavenCentral()
}
}
达梦慢SQL分析
调整达梦Log配置文件,存储位置,日志分割配置
/app/dmdata/DAMENG/sqllog.ini 达梦Log配置文件
登录达梦数据库,执行下面代码
SP_SET_PARA_VALUE(1,'SVR_LOG',0) 关闭svr_log
SP_SET_PARA_VALUE(1,'SVR_LOG',1) 开启svr_log
SP_REFRESH_SVR_LOG_CONFIG(); 刷新配置生效生成的log文件通过正则进行查询:[0-9][0-9][0-9][0-9][0-9]\(ms\) 查10s以上的sql
查询dm数据库分配的内存占用
SELECT SUM(PARA_VALUE)/1024
FROM (select *
from v$dm_ini
where "PARA_NAME" in ('MEMORY_TARGET',
'BUFFER',
'RECYCLE',
'HJ_BUF_GLOBAL_SIZE',
'HAGR_BUF_GLOBAL_SIZE',
'CACHE_POOL_SIZE' ,
'DICT_BUF_SIZE',
'SORT_BUF_GLOBAL_SIZE',
'RLOG_POOL_SIZE'))时序型项目,JDK8,java部署后内存占用持续增长导致溢出。
使用arthas进行查看分析,年轻代持续创建没有进行GC,达到max值后进行GC,默认的并行垃圾回收会对Total进行持续增长,默认单jar最大16G内存占用。
实际单jar的年轻代占用gc后在300MB左右,但是默认不达到Total值不进行GC,Total值在5G
所以年轻代里面大部分都是已经失效的内存数据,只是没有进行GC回收,作为垃圾占用服务器内存,导致服务器内存持续增长。
解决方案,使用G1垃圾收集器,调整垃圾回收速度,加快垃圾回收触发。
修改后程序稳定在1-2G之间,没有产生持续增长的问题。
java \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=100 \
-XX:InitiatingHeapOccupancyPercent=20 \
-XX:G1HeapRegionSize=4M \
-XX:NewRatio=2 \
-Duser.timezone=GMT+08 \
-jar main.jar -XX:+UnlockExperimentalVMOptions
解锁实验性的虚拟机选项,使得可以使用一些实验性或不常见的 JVM 特性。
-XX:+UseG1GC
启用 G1 垃圾收集器(Garbage First GC)。G1 是一个旨在适应大内存应用的垃圾收集器,它在性能和暂停时间上有较好的平衡。
-XX:MaxGCPauseMillis=100
设置垃圾回收时最大暂停时间为 100 毫秒。G1 会尝试在垃圾回收过程中尽量减少停顿时间。
-XX:InitiatingHeapOccupancyPercent=20
设置堆内存占用达到 20% 时,启动垃圾回收。这个参数用于控制何时触发垃圾回收。
-XX:G1HeapRegionSize=4M
设置 G1 垃圾收集器的堆区域大小为 4MB。G1 将堆划分为多个区域,以优化内存管理。
-XX:NewRatio=2
设置新生代和老年代的比例为 2。即新生代的大小是老年代的 1/2。
linux默认配置文件地址:/etc/dm_svc.conf
配置之前,需要注意事务一致性和实时性,强实时性情况下,不建议使用
LOGIN_MODE
指定优先登录的服务器模式。0:优先连接 Primary 模式的库,Normal 模式次之,最后选择 Stantby 模式;1:只连接主库;2:只连接备库;3:优先连接 Standby 模式的库,Primary 模式次之,最后选择 Normal 模式;4:优先连接 Normal 模式的库,Primary 模式次之,最后选择 Standby 模式。缺省值为 4。
SWITCH_TIMES
检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围 1~9223372036854775807,缺省值为 3。
SWITCH_INTERVAL
表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807,缺省值为 200。
RW_SEPARATE
指定是否启用读写分离。取值范围:0、1、2、4。0 表示不启用读写分离;1 表示启用读写分离;2 表示启用读写分离,且备库由客户端进行选择;4 表示启用读写分离,且连接备库时仅允许连接事务一致的备库。缺省值为 0。
启用读写分离时,LOGIN_MODE 参数失效。
RW_PERCENT
启用读写分离时,读写分离的分发比例,有效值范围 0~100,缺省值为 25。
参考:
dm.jdbc.driver.DMException: 超出全局分组空间,请调整HAGR_BUF_GLOBAL_SIZE、HAGR_BUF_SIZE、HAGR_BLK_SIZE
select * from SYS."V$DM_INI" where PARA_NAME = 'HJ_BUF_GLOBAL_SIZE';
call SP_SET_PARA_VALUE (1, 'HJ_BUF_GLOBAL_SIZE',200000);
治标不治本,还是需要调整查询语句,短时间内不报错但是访问速度较慢
test