扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下RocketMQ如何实现性能优化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
成都创新互联致力于网站设计制作、网站制作,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择成都创新互联,就选择了安全、稳定、美观的网站建设服务!
limits.conf 设置用户能打开的最大文件数
vim /etc/security/limits.conf
# End of file
baseuser soft nofile 655360
baseuser hard nofile 655360
* soft nofile 655360
* hard nofile 655360
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
是否允许内存的过量分配
当为0的时候,当用户申请内存的时候,内核会去检查是否有这么大的内存空间
当为1的时候,内核始终认为,有足够大的内存空间,直到它用完了为止
当为2的时候,内核禁止任何形式的过量分配内存
写入的时候,内核会清空缓存,腾出内存来,相当于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.
如果为0的话,那么系统会倾向于从其他节点分配内存
如果为1的话,那么系统会倾向于从本地节点回收Cache内存多数时候
定义了一个进程能拥有的最多的内存区域,默认为65536
当dirty cache到了多少的时候,就启动pdflush进程,将dirty cache写回磁盘
当有dirty_background_bytes存在的时候,dirty_background_ratio是被自动计算的
当一个进程的dirty cache到了多少的时候,启动pdflush进程,将dirty cache写回磁盘
当dirty_bytes存在的时候,dirty_ratio是被自动计算的
pdflush每隔多久,自动运行一次(单位是百分之一秒)
每次swap in或者swap out操作多少内存页为2的指数。等于0的时候,为1页;等于1的时候,为2页;等于2的时候,为4页
swappiness=0 仅在内存不足的情况下,当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间
swappiness=1 内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换
swappiness=10 当系统存在足够内存时,推荐设置为该值以提高性能
swappiness=60 默认值
swappiness=100 内核将积极的使用交换空间
线上RocketMQ的JVM未做调优,堆内存使用8G;主要从RocketMQ配置参数方面梳理下。
flushDiskType=ASYNC_FLUSH
同步刷盘TPS过低,较难满足业务发展需求
transientStorePoolEnable=true
消息写入到堆外内存,消费时从pageCache消费,读写分离,提升集群性能
warmMapedFileEnable=true
开启文件预热,避免日志文件在分配内存时缺页中断
slaveReadEnable=true
消息占用物理内存的大小通过accessMessageInMemoryMaxRatio来配置默认为40%;如果消费的消息不在内存中,开启slaveReadEnable时会从slave节点读取;提高Master内存利用率
transferMsgByHeap默认true设置为false
Broker响应消费请求时,不必将数据重新读到堆内存再发送给客户端;直接从PageCache将数据发送给客户端
看完了这篇文章,相信你对“RocketMQ如何实现性能优化”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流