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-与原生持久化有关的调优

原文地址:https://www.cnblogs.com/cord/p/11317970.html

时间: 2024-11-09 10:20:32

apache ignite系列(九):ignite调优的相关文章

apache查看工作模式及调优

一,查看工作模式 /usr/sbin/httpd -l Compiled in modules:  core.c  prefork.c  http_core.c  mod_so.c 如果出现prefork.c,表示apache工作在prefork模式下 二,prefork调优 ServerLimit 3000 StartServers 750 MinSpareServers 5 MaxSpareServers 100 MaxClients 3000 MaxRequestsPerChild 100

jvm原理及性能调优系列(jvm调优)

个人认为jvm调优主要通过以下方法解决 1.设置合适的最大堆内存(新生代和老生代的最大和值)和最小堆内存(jvm启动时占用的操作系统内存大小),及设置好堆的比例分配. 2.设置合适的新生代 因为对其对系统性能和GC回收有一定的影响. 3.设置合适的持久代 因为其直接决定系统可以支持多少个类定义和多少个常亮. 4.设置合适的线程栈 否则系统可能因为线程所需资源和空间不够而异常退出.

性能测试系列-java gc调优

性能测试中除了需要做好性能测试外,我们还需要做性能测试后的,性能调优,需要发现性能问题,也需要做性能调优,在做性能调优中,jvm的性能调优是经常遇到的一个. 随着jdk版本的迅速变化,jdk里面的GC算法也是发生了很多变化,新版的jdk中,G1的已经成了jdk的默认算法了,性能测试中,我们经常关注的比较多的就是tps,吞吐率,内存占用,CPU占用,响应时间,其中GC 的回收对响应时间有非常大的影响,早期的GC回收,基本都会造成很长时间的Stop-The-World 的暂停,新GC算法很多都是围绕

JVM 性能调优工具

jdk自带的工具,在macOs系统中的目录位置(jdk具体版本位置要替换):/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin 参考:Mac 上 java 究竟在哪里,本文彻底让你搞清楚! 相关文章 网址 Jvm 系列(七):Jvm 调优-工具篇 http://www.ityouknow.com/jvm/2017/09/22/jvm-tool.html 原文地址:https://www.cnblogs.com/

性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇

一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显得非常重要了,选用什么配置的服务器.如何对服务器进行调优.如何从服务器监控中发现程序的性能问题. 如何判断服务器的瓶颈在哪里等 就成为了服务器性能监控和分析时重点需要去解决的问题了. 1     服务器的性能监控和分析 1.1      Linux服务器的性能指标监控和分析 1.1.1       通过vmstat深挖服务器的性能问题 1.1.2       如何通过mpstat 分析服务器的性能指标

apache ignite系列(九):使用ddl和dml脚本初始化ignite并使用mybatis查询缓存

? 博客又断了一段时间,本篇将记录一下基于ignite对jdbc支持的特性在实际使用过程中的使用. 使用ddl和dml脚本初始化ignite 由于spring-boot中支持通过spring.datasource.schema属性指定初始化DDL脚本,spring.datasource.data指定初始化DML脚本.而ignite支持jdbc协议,测试了一下,发现一样可以通过该配置初始化ignite. spring.datasource.url=jdbc:ignite:thin://127.0.

apache ignite系列(一): 简介

apache-ignite简介(一) 1,简介 ? ignite是分布式内存网格的一种实现,其基于java平台,具有可持久化,分布式事务,分布式计算等特点,此外还支持丰富的键值存储以及SQL语法(基于h2引擎),可以看成是一个分布式内存数据库. 与ignite类似的产品有gemfire(12306目前正在使用),其开源版为geode.与gemfire相比,ignite对sql的支持比较完善,提供了数据并置来提升性能,还有对分布式事物的支持以及对spring的集成都比较友好,很方便进行嵌入式集成进

linux+jre+apache+mysql+tomcat调优

一.不再为Apache进程淤积.耗尽内存而困扰 0. /etc/my.cnf,在mysqld那一段加上如下一行: log-slow-queries=queries-slow.log 重启MySQL 酌情过上一段时间,执行mysqldumpslow命令,或直接查看datadir/queries-slow.log,从中找出执行超时的SQL语句.其中datadir是MySQL所有数据库的存放路径. 根据上一步找出的SQL语句的内容,找到相应的数据表和脚本文件,查看超时原因所在.可能的原因有:数据量确实

Spark入门实战系列--6.SparkSQL(中)--深入了解运行计划及调优

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1  运行环境说明 1.1.1 硬软件环境 l  主机操作系统:Windows 64位,双核4线程,主频2.2G,10G内存 l  虚拟软件:VMware® Workstation 9.0.0 build-812388 l  虚拟机操作系统:CentOS6.5 64位,单核 l  虚拟机运行环境: Ø  JDK:1.7.0_55 64位 Ø  Hadoop:2.2.0(需要编译为64位) Ø