Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

分析方法:在项目中添加```-XX:NativeMemoryTracking=detail```JVM参数重启项目,使用命令```JVM参数重启项目,写入5分钟后,使用命令```jcmd pid VM.native_memory detail```查看到的内存分布如下

...

可以看到堆外内存实际占用为4GB,Jprofiler看到的40MB只包含了meta space 和 code space,对我们的分析构成了严重误导!

执行的JAVA指令是:/data/fqx/jdk1.8.0_211/bin/java -Dlogback.configurationFile=./../conf/logback.xml -DIOTDB_HOME=./.. -DTSFILE_HOME=./.. -DIOTDB_CONF=./../conf -DTSFILE_CONF=./../conf -Dname=iotdb\.IoTDB -Xms2048M -Xmx100G -XX:NativeMemoryTracking=detail -Dlogback.configurationFile=./../conf/logback.xml -DIOTDB_HOME=./.. -DTSFILE_HOME=./.. -DIOTDB_CONF=./../conf -DTSFILE_CONF=./../conf -Dname=iotdb\.IoTDB -cp .........


验证方法:为了验证确实是堆外内存导致内存暴涨,我们调整-XX:MaxDirectMemorySize=2G,也就是限制堆外内存最大使用2G,发现内存使用确实下降,但是读写速度有很大的降低(30倍左右),证明IoTDB确实使用了超过2G的堆外内存,如果对堆外内存限制,则性能会有损失,下面是读最大时间的性能截图:

...