版本支持的参数。 本文讲解最近关于在参与hive往spark迁移过程中遇到的一些参数相关问题的调优。 内容分为两部分,第一部分讲遇到异常,从而需要通过设置参数来解决的调优;第二部分讲用于提升性能而进行的调优。 异常调优 spark.sql.hive.convertMetastoreParquet parquet是一种列式存储格式,可以用于spark-sql 和hive 的存储格式。 性能调优 除了遇到异常需要被动调整参数之外,我们还可以主动调整参数从而对性能进行调优。 spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 1或者2,默认是1.
用于实时查看和调整 JVM 进程参数。 jcmd JVM 命令行调试 工具。 (2) 如果发现有大量的线程都正处于这种状态,并且堆栈信息中得知正等待网络读写,这是因为网络阻塞导致线程无法执行,很有可能是一个网络瓶颈的征兆。 默认为2 注意:-Xmn的优先级比-XX:NewRatio高,若-Xmn已指定,则OldSize=HeapSize-NewSize,无需再按比例计算。生产环境中一般只需指定-Xmn就足够了。 如果线程数较多,函数的递归较少,线程栈内存可以调小节约内存,默认1M MetaSpace/PermGen jdk1.8以下设置永久代大小: -XX:PermSize: 永久代初始大小 -XX:MaxPermSize (离线环境压测可以打开这两个参数) 参考资料 JVM对外内存完全解读
2. 管理和分配HRegion,比如在HRegion split 时分配新的HRegion;在HRegionServer 退出时迁移其内的 HRegion 到其他HRegionServer 上。 2. 读写HDFS,管理Table 中的数据。 3. 2. 实现HMaster 主从节点的failover。 本教程以hadoop 为例,根据自己的实际情况调整ulimit 限制 liunx 内核网络参数调整 在linux 中所有的TCP/IP 参数都位于/proc/sys/net 目录下(请注意,对/proc image.png Hbase 参数优化 RPC 参数优化 hbase.regionserver.handler.count RPC 处理线程数 默认值为30 Memstore 参数优化 image.png
开启MapJoin参数设置: (1)设置自动选择Mapjoin set hive.auto.convert.join = true; 默认为true (2)大表小表的阀值设置(默认25M一下认为是小表 开启动态分区参数设置 (1)开启动态分区功能(默认true,开启) hive.exec.dynamic.partition=true (2)设置为非严格模式(动态分区的模式,默认strict, 该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。 mapred.map.tasks.speculative.execution=false; SET mapred.reduce.tasks.speculative.execution=false; 九、Hive调优配置项合集 join的map数控制,默认是10000; hive.skewjoin.mapjoin.min.split 数据倾斜join时map join的map任务的最小split大小,默认是33554432,该参数要结合上面的参数共同使用来进行细粒度的控制
【前言】 前面几篇文章讲述了rabbitmq消息存储的相关原理,也提到了有些参数可以进行配置。这些配置参数的微调在不同的场景中会有不同的效果。 默认值为4096,即Q1->Q2每次最多移动4096*2=8192条消息,同样Q2->delta、Q4->Q3、Q3->delta每次最多移动8192条消息。 【参数调优】 queue_index_max_journal_entries 先来看一组测试数据 测试场景是这样的: 16个生产者分别向64个持久化队列不间断发送消息,队列设置为lazy模式;每条消息大小为 【总结】 本文总结了几个调优相关的参数,也在特定场景下对其进行了测试说明。 此外,erlang层面还会有一些参数可以微调,因此不同场景下还需要结合实际需要进行参数的调优。
用于实时查看和调整 JVM 进程参数。 jcmd JVM 命令行调试 工具。 (2) 如果发现有大量的线程都正处于这种状态,并且堆栈信息中得知正等待网络读写,这是因为网络阻塞导致线程无法执行,很有可能是一个网络瓶颈的征兆。 默认为2 注意:-Xmn的优先级比-XX:NewRatio高,若-Xmn已指定,则OldSize=HeapSize-NewSize,无需再按比例计算。生产环境中一般只需指定-Xmn就足够了。 如果线程数较多,函数的递归较少,线程栈内存可以调小节约内存,默认1M MetaSpace/PermGen jdk1.8以下设置永久代大小: -XX:PermSize: 永久代初始大小 -XX:MaxPermSize (离线环境压测可以打开这两个参数) 参考资料 JVM对外内存完全解读
文章目录 总体架构 主要的组件 执行过程 tomcat 调优 内存优化 并发优化 缓存优化 IO优化 开启线程池 添加Listener 组件优化 APR Tomcat Native 配置 性能测试(工具 article/details/79134451](https://blog.csdn.net/cc_xp/article/details/79134451) 总体架构 主要的组件 执行过程 tomcat 调优 2)jmap:观察运行中的JVM 物理内存的占用情况,包括Heap size , Perm size等。 调后的配置 参数说明 maxThreads 客户请求最大线程数 minSpareThreads Tomcat初始化时创建的 socket 线程数 maxSpareThreads Tomcat 开启线程池 配置 参数说明 name:线程池名称,用于 Connector中指定。
这里附上一个调优的脚本,我来简单翻译一下: 地址: https://github.com/nyist-mirror/kernel_tuning # ! "16777216" > /proc/sys/net/core/wmem_max Echo "16777216" > /proc/sys/net/core/wmem_default 设置Linux自动调优 > /proc/sys/net/ipv4/tcp_no_metrics_save 在终止TCP连接之前需要重试多少次 Echo "5" > /proc/sys/net/ipv4/tcp_retries2 tcp_keepalive_intvl 确定超时前的探测数 Echo "3" > /proc/sys/net/ipv4/tcp_keepalive_probes #如果你是关闭socket的一方,socket保持FIN-WAIT-2状态需要多长时间 sys/net/ipv6/conf/all/disable_ipv6 Echo "1" > /proc/sys/net/ipv6/conf/default/disable_ipv6 # ####文件系统调优
调优基本概念 在调整JVM性能时,通常有三个组件需要考虑: 堆大小调整 垃圾收集器调整 JIT编译器 大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优 垃圾收集器Parallel参数调优 Parallel垃圾收集器在JDK8中是JVM默认的垃圾收集器,它是以吞吐量优先的垃圾收集器。其可调节的参数如下: ? 垃圾收集器CMS参数调优 CMS垃圾收集器是一个响应时间优先的垃圾收集器,Parallel收集器无法满足应用程序延迟要求时再考虑使用CMS垃圾收集器,从JDK9开始CMS收集器已不建议使用,默认用的是G1 垃圾收集器G1参数调优 G1收集器是一个兼顾吞吐量和响应时间的收集器,如果是大堆(如堆的大小超过6GB),堆的使用率超过50%,GC延迟要求稳定且可预测的低于0.5秒,建议使用G1收集器。 ? GC调优之前,我们需要了解当前JVM参数的信息。
echo 3 > /proc/sys/vm/drop_caches 确实有点效果但不治根 查看一下tomcat占用资源情况(mem空间占用了87.9%) 需要对tomcat的JVM参数进行优化一下 LINUX中调优tomcat-----路径:安装路径下/bin/catalina.sh vim catalina.sh 在 cygwin=false 之上添加所需要配置的内存大小 JAVA_OPTS
需要对tomcat的JVM参数进行优化一下 LINUX中调优tomcat—–路径:安装路径下/bin/catalina.sh vim catalina.sh 在 cygwin=false 之上添加所需要配置的内存大小
此项参数可控制TIME_WAIT 最大数量。 这几个参数,建议在流量非常大的服务器上开启,会有显著效果。一般的流量小的服务器上,没必要去设这几个参数。 net.ipv4.tcp_synack_retries= 2 #为打开对端的连接,内核需发送个SYN并附带个回应前一个SYN的ACK。即三次握手中的第二次握手。 net.ipv4.tcp_syn_retries= 2 #在内核放弃建立连接前发送SYN包的数量。 #net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。 #上述内存单位是页,而不是字节。 net.ipv4.tcp_fin_timeout= 30 #如果套接字由本端要求关闭,这个参数决定它保持在FIN-WAIT-2状态的时间。对端可出错并永不关闭连接,甚至意外当机。缺省值是60秒。
内存调优 设置heap大小 这个非常重要,通常只要这里设置够了,就不会出现溢出。 如果物理内存为32G(一般为物理内存的90%,也就是27~28G) 新生代和老年代的大小 这个参数相当于设置等值的最小、最大新生代,NewRatio这个设置新、老代比例,NewRatio=1代表,两个相等大小 Xmn1g 这个值如果不设的话,默认只有6M 设置持久代大小 同理,这两个值应该是一样的(jdk7) -XX:PermSize=512m -XX:MaxPermSize=512m JDK8起用这两个参数 设置code cache -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops 设置字符串压缩 -XX:-CompactStrings GC调优 比如2颗6核超线程(超线程后1个核相当于2个线程)就是24/4=6调,置ParallelGCThreads时最大不要超过6就行了。
执行 ulimit -a 查看系统配置 需要修改max user processes 和 open files 这两个值 vim /etc/security/limits.conf #新增下面几行 * soft nofile 65535 * hard nofile 65535 * soft nproc 10000 * hard nproc 10000 #重新打开session就可以生效 修改sysctl.conf文件 vim /e
JVM参数说明 Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢 Xmx 是指设定程序运行期间最大可占用的内存大小。 默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。 可能会影响性能,但是可以消除碎片 3、辅助信息 JVM提供了大量命令行参数,打印信息,供调试使用。 调优总结 年轻代大小的选择 1、响应时间优先的应用 :尽可能设大,直到接近系统的最低响应时间限制 (根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用 年老代大小的选择 1、响应时间优先的应用 :年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率 和会话持续时间 等一些参数
2 进来不要让你产生的食物涨大道可以噎死你的地步。 还可以试一下,通过调整参数的方式来让你的MONGODB 的支持更快的刷新速度。 那么如果磁盘出现锯齿装的I/O 那么就值得来看看我们的问题了 这里有两个参数我们上面使用过了 eviction_dirty_trigger eviction_dirty_target_settings 这里会牵扯几个问题,1 多少信息保留在cache中 2 什么情况下会触发将内存的数据刷到我们的磁盘上,减少这些参数的情况下,可以提高刷新脏页的频度。 频繁写入的情况下,通过Mongostat 来查看系统的性能的情况下,qw会持续的走高,这说明写入在进行排队的操作,WiredTiger无法满足数据插入的情况,此时如果CPU 负载不高情况下,可以调整上面的参数看看是否有改善
2.配置数据序列化 Spark默认序列化方式为Java的ObjectOutputStream序列化一个对象,速度较慢,序列化产生的结果有时也比较大。 Spark官网推荐为每个cpu Core分配2到3个任务,所以在32个core的服务器上,我们通过配置spark.default.parallelise=64,设置cpu的并行数量,从而防止并行度太高导致的任务启动与切换的开销 参数spark.shuffle.memoryFraction spark应用程序在所申请的内存资源中可用于shuffle的比例 SQL级别的优化: 1.优化sql结构 传统的行式存储数据库在经过 2.表关联方式的改变 sparkSQL的查询优化是基于Scala语言开发的Catalyst,在最后的执行阶段,会在Spark内部将执行计划转化为有向无环图DAG进行执行。
HDFS参数调优hdfs-site.xml dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为8台时,即20*8的对数,此参数设置为60 对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。 YARN参数调优yarn-site.xml (1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive 面临问题:数据统计主要用HiveSQL,没有数据倾斜 (2)解决办法: 内存利用率不够。这个一般是Yarn的2个配置造成的,单个任务可以申请的最大内存大小,和Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。 [HDFS配置文件参数设置的优先级] hdfs-site.xml是HDFS的配置文件,其中包含了各种对HDFS集群的设置参数,比如集群中存储文件副本的数量,namenode辅助节点的地址等。
用法: vim /etc/sysctl.conf #修改内容 sysctl -p #生效 相关参数仅供参考,具体数值还需要根据机器性能,应用场景等实际情况来做更细微调整。 net.ipv4.tcp_fin_timeout = 10 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 缺省是2小时,改为30分钟。 net.ipv4.tcp_rmem #与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。 net.ipv4.tcp_wmem = 30000000 30000000 30000000 #为自动调优定义每个 socket 使用的内存。
https://docs.oracle.com/cd/E40972_01/doc.70/e40973/cnf_jvmgc.htm#autoId0