版本:
https://github.com/actiontech/dble
当前生产现行版本:MavenVersion 2.19.09.0
当前官方release稳定版本:3.23.08.0
bash:free -h
total used free shared buff/cache available
Mem: 31G 7.5G 20G 784M 3.8G 23G
Swap: 7.5G 0B 7.5G
--发现--
---- 当前bufferPoolPageNumber值不足
<property name="bufferPoolPageNumber">256</property>
<property name="bufferPoolPageSize">2097152</property
----
--- 此处发现生产配置过低
-- WRAPPER.conf设置
wrapper.java.additional.12=-Xmx1G
wrapper.java.additional.13=-Xms1G
wrapper.java.additional.14=-XX:MaxDirectMemorySize=2G
--- wrapper总内存 --即 dble总内存
wrapper.java.initmemory=4096
wrapper.java.maxmemory=4096
---
调整
-- server.conf设置 -- 此处两条数值变更为:
<property name="bufferPoolPageNumber">4915</property> <<< 此处单位为页数
<property name="bufferPoolPageSize">2097152</property> <<< 此处单位为字节
-- WRAPPER.conf设置
wrapper.java.additional.12=-Xmx8G
wrapper.java.additional.13=-Xms8G
wrapper.java.additional.14=-XX:MaxDirectMemorySize=12G
--- wrapper总内存 --即 dble总内存
wrapper.java.initmemory=20480
wrapper.java.maxmemory=20480
验算:
4915 * 2 = 9830 ~ 9g 严格小于MaxDirectMemorySize配置的 12G 符合官方推荐
其他坑
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
---- > 应该替换为Oracle JDK/其他release完整安装
dump排查操作 <<< 需要在发生故障时间内进行,重启后内存已经释放
-- 此操作需要更换Oracle JDK
dump操作
dble日志
dble.log,wrapper.log,gc日志,bootstrap.cnf配置
打印线程栈,执行三到四次,每次间隔两分钟
jstack -l {pid} > dble_jstack.log
排错
打印堆内存dump
可以在dble的bootstrap.cnf配置文件中添加以下内容:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof
当dble即将发生oom的情况下打印当时的内存dump
jmap -dump:live,format=b,file=dble_dump.bin {pid}
上面这种方式是将java的堆内存打印到文件中,当堆内存空间比较大时,会很慢,可以通过下面的方式,将堆空间中占用内存比较多的实例打印出来观察
jmap -histo:live {pid} > /tmp/dble_live.log
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




