zoukankan      html  css  js  c++  java
  • 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-与原生持久化有关的调优

  • 相关阅读:
    redis学习
    Ubuntu命令大全
    关于jquery中attr和prop的用法
    Ubuntu下修改为永久DNS的方法
    Yii2 behaviors中verbs access的一些理解
    vue_ form表单 v-model
    vue-one_demo_music
    ES6
    VUE 入门 01
    Django model.py表单设置默认值允许为空
  • 原文地址:https://www.cnblogs.com/cord/p/11317970.html
Copyright © 2011-2022 走看看