RocketMQ性能优化【实战笔记】

转发:https://cloud.tencent.com/developer/article/1496414

目录

一、系统优化
1.最大文件数
2.系统参数调整
二、RocketMQ性能调优
1.开启异步刷盘
2.开启堆外内存设置
3.开启文件预热
4.开启Slave读权限
5.关闭堆内存据传输

一、系统优化

1.最大文件数

limits.conf 设置用户能打开的最大文件数

vim /etc/security/limits.conf

# End of file
baseuser soft nofile 655360
baseuser hard nofile 655360
* soft nofile 655360
* hard nofile 655360
2.系统参数调整

vim /etc/sysctl.conf

vm.overcommit_memory=1
vm.drop_caches=1
vm.zone_reclaim_mode=0
vm.max_map_count=655360
vm.dirty_background_ratio=50
vm.dirty_ratio=50
vm.dirty_writeback_centisecs=360000
vm.page-cluster=3
vm.swappiness=1
sysctl -p
参数说明

1.overcommit_memory

是否允许内存的过量分配
当为0的时候,当用户申请内存的时候,内核会去检查是否有这么大的内存空间
当为1的时候,内核始终认为,有足够大的内存空间,直到它用完了为止
当为2的时候,内核禁止任何形式的过量分配内存

2.drop_caches

写入的时候,内核会清空缓存,腾出内存来,相当于sync
写1的时候,会清空页缓存,就是文件
写2的时候,会清空inode和目录树
写3的时候,都清空
This is a non-destructive operation and will only free things that are completely unused.
Dirty objects will continue to be in use until written out to disk and are not freeable.
If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.

3.zone_reclaim_mode

如果为0的话,那么系统会倾向于从其他节点分配内存
如果为1的话,那么系统会倾向于从本地节点回收Cache内存多数时候

4.max_map_count

定义了一个进程能拥有的最多的内存区域,默认为65536

5.dirty_background_bytes/dirty_background_ratio

当dirty cache到了多少的时候,就启动pdflush进程,将dirty cache写回磁盘
当有dirty_background_bytes存在的时候,dirty_background_ratio是被自动计算的

6.dirty_bytes/dirty_ratio

当一个进程的dirty cache到了多少的时候,启动pdflush进程,将dirty cache写回磁盘
当dirty_bytes存在的时候,dirty_ratio是被自动计算的

7.dirty_writeback_centisecs

pdflush每隔多久,自动运行一次(单位是百分之一秒)

8.page-cluster

每次swap in或者swap out操作多少内存页为2的指数。等于0的时候,为1页;等于1的时候,为2页;等于2的时候,为4页

9.swappiness

swappiness=0 仅在内存不足的情况下,当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间
swappiness=1 内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换
swappiness=10 当系统存在足够内存时,推荐设置为该值以提高性能
swappiness=60 默认值
swappiness=100 内核将积极的使用交换空间

二、RocketMQ性能调优

线上RocketMQ的JVM未做调优,堆内存使用8G;主要从RocketMQ配置参数方面梳理下。

1.开启异步刷盘
flushDiskType=ASYNC_FLUSH
同步刷盘TPS过低,较难满足业务发展需求
2.开启堆外内存设置
transientStorePoolEnable=true
消息写入到堆外内存,消费时从pageCache消费,读写分离,提升集群性能
3.开启文件预热
warmMapedFileEnable=true
开启文件预热,避免日志文件在分配内存时缺页中断
4.开启Slave读权限
slaveReadEnable=true
消息占用物理内存的大小通过accessMessageInMemoryMaxRatio来配置默认为40%;如果消费的消息不在内存中,开启slaveReadEnable时会从slave节点读取;提高Master内存利用率
5.关闭堆内存据传输
transferMsgByHeap默认true设置为false
Broker响应消费请求时,不必将数据重新读到堆内存再发送给客户端;直接从PageCache将数据发送给客户端
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat是一个开源的Java Servlet容器,用于处理Java Servlet和JSP(Java Server Pages)请求。为了提高Tomcat的性能,我们可以采取以下一些优化措施: 1. 调整内存设置:Tomcat的性能受到内存的影响较大,可以根据服务器的硬件和预期的负载来配置JVM(Java虚拟机)的内存参数,如-Xms(初始堆大小)和-Xmx(最大堆大小)。合理配置内存可以有效地避免内存溢出和频繁的垃圾回收。 2. 合理配置线程池:Tomcat使用线程池来处理并发请求,可以通过调整线程池的大小和配置参数来提高性能。可以根据服务器的硬件配置,预估的请求数量和处理时间来合理配置线程池的大小,避免线程过多或过少的情况发生。 3. 优化静态资源的处理:静态资源(如图片、CSS和JavaScript文件)可以通过使用CDN(内容分发网络)或将其存储在独立的服务器上来提高访问速度。同时,可以启用GZIP压缩和浏览器缓存,以减少传输的数据量和渲染时间。 4. 优化数据库访问:在应用程序中,数据库访问是一个非常常见且需要优化的环节。可以使用连接池来减少数据库连接的开销,同时尽量减少不必要的SQL查询和使用合适的索引。此外,将频繁查询的数据缓存到内存中,可以大大提高性能。 5. 调整Tomcat的配置参数:Tomcat的性能也受到其自身的配置参数的影响,可以根据具体情况来调整一些重要的参数,如连接超时时间、最大请求数量、缓冲区大小等。 6. 监控和识别性能问题:在优化Tomcat性能的过程中,及时监控和识别性能问题非常重要。可以使用一些性能监控工具,如JVisualVM、JProfiler等来识别潜在的性能瓶颈和热点。 综上所述,通过调整内存设置、线程池配置、静态资源优化、数据库访问优化、调整Tomcat配置参数以及监控问题识别,我们可以有效地优化Tomcat的性能,提升应用程序的响应速度和并发处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值