apache ignite系列(九):ignite調優


1,配置文件調優

1.1 設置頁面大小(pagesize)

先查看系統pagesiz,使用PAGE_SIZE或者PAGESIZE

# getconf PAGE_SIZE
4096
# getconf PAGESIZE
4096

ignite默認配置是4k,也就是4096,如果服務器和ignite默認配置不一致,那么就得在配置文件中指定:

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
  <property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
      .......
      <!-- Set the page size to 4 KB -->
      <property name="pageSize" value="#{4 * 1024}"/>
      .......
    </bean>
  </property>
</bean>

1.2 增加WAL段大小

WAL段的默認大小(64MB)在高負載情況下可能是低效的,因為它導致WAL在段之間頻繁切換,並且切換是有點昂貴的操作。將段大小設置為較大的值(最多2GB)可能有助於減少切換操作的次數,不過這將增加預寫日志的占用空間。

可以調整為1GB:

        <property name="dataStorageConfiguration">
            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                ......
                <!-- Size of the WAL (Write Ahead Log) segment -->
                <property name="walSegmentSize" value="#{1024 * 1024 * 1024}"/>
                ......
            </bean>
        </property>

1.3 調整WAL模式

一般建議使用LOG_ONLY模式,出於對持久化和性能之間的妥協:

    <property name="dataStorageConfiguration">
        <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!--In our experience LOG_ONLY is a good compromise between durability and performance.-->
            <property name="walMode" value="LOG_ONLY"/>
        </bean>
    </property>

1.4 頁面寫入優化

Ignite會定期地啟動檢查點進程,以在內存和磁盤間同步臟頁面。這個進程在后台進行,對應用沒有影響。

但是,如果由檢查點進程調度的一個臟頁面,在寫入磁盤前被更新,它之前的狀態會被復制進一個特定的區域,叫做檢查點緩沖區。如果這個緩沖區溢出,那么在檢查點處理過程中,Ignite會停止所有的更新。因此,寫入性能可能降為0。

當檢查點處理正在進行中時,如果臟頁面數達到閾值,同樣的情況也會發生,這會使Ignite強制安排一個新的檢查點執行,並停止所有的更新操作直到第一個檢查點執行完成。

當磁盤較慢或者更新過於頻繁時,這兩種情況都會發生,要減少或者防止這樣的性能下降,可以考慮啟用頁面寫入優化算法。這個算法會在檢查點緩沖區填充過快或者臟頁面占比過高時,將更新操作的性能降低到磁盤的速度。

開啟頁面寫入優化:

  <!-- Enabling Ignite Native Persistence. -->
  <property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
      <!-- Enable write throttling. -->
      <property name="writeThrottlingEnabled" value="true"/>
    </bean>
  </property>

1.5 檢查點緩沖區大小

緩沖區的默認大小是根據內存區大小計算而來的值:

數據區大小 默認檢查點緩沖區大小
< 1GB MIN (256 MB, 數據區大小)
1GB ~ 8GB 數據區大小/4
> 8GB 2GB

默認的緩沖區大小並沒有為寫密集型應用進行優化,因為在大小接近標稱值時,頁面寫入優化算法會降低寫入的性能,因此在正在進行檢查點處理時,可以考慮增加DataRegionConfiguration.checkpointPageBufferSize,並且開啟寫入優化來阻止性能的下降:

    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
      <!-- Enable write throttling. -->
      <property name="writeThrottlingEnabled" value="true"/>

      <property name="defaultDataRegionConfiguration">
        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
          <!-- Enabling persistence. -->
          <property name="persistenceEnabled" value="true"/>

          <!-- Increasing the buffer size to 8 GB. -->
          <property name="checkpointPageBufferSize"
                    value="#{8 * 1024 * 1024 * 1024}"/>
        </bean>
      </property>
    </bean>

2, jvm調優

以10GB堆內存示例:

java8

-server
-Xms10g
-Xmx10g
###當JVM初始化時預先對Java堆進行預先摸底(Pre-touch),堆的每個頁初始化時滿足需求,而不是應用執行時遞增
-XX:+AlwaysPreTouch
###使用G1
-XX:+UseG1GC
###新生代GC優先於Full GC執行
-XX:+ScavengeBeforeFullGC
###禁止調用System.gc();但jvm的gc仍然有效
-XX:+DisableExplicitGC

具體調整方式為修改啟動腳本ignite.sh:

#
# Uncomment the following GC settings if you see spikes in your throughput due to Garbage Collection.
#
JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
JVM_OPTS="$JVM_OPTS -XX:+AlwaysPreTouch -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC"

添加gc日志收集:

JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/apache-ignite-2.7.0-bin/heapdump -XX:+ExitOnOutOfMemoryError"
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintAdaptiveSizePolicy"
JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Xloggc:/data/apache-ignite-2.7.0-bin/gc.log"

參考鏈接:

https://liyuj.gitee.io/doc/java/ProductionReadiness.html#_11-4-2-與原生持久化有關的調優


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM