這篇文章將為大家詳細講解有關如何排查RocketMQ一次消費性能問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設、成都網(wǎng)站設計、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務峨山縣,10余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
在容器推廣中,為了測試容器的性能,需要消息SDK與ECS上在發(fā)送和消費的性能對比;在對比消費性能時,發(fā)現(xiàn)容器中的消費性能居然是ECS的2倍。容器并發(fā)消費的20個線程TPS在3萬左右,ECS中20個消費線程TPS在1.5萬左右。
問題:配置均采用8C16G,容器中的性能幾乎是ECS的兩倍,這不科學,事出反常必有妖。
tcpdump顯示在消費的機器存在頻繁的域名解析過程;10.x.x.185向DNS服務器100.x.x.136.domain和10.x.x.138.domain請求解析。而10.x.x.185這臺機器又是消息發(fā)送者的機器IP,測試的發(fā)送和消費分別部署在兩臺機器上。
問題:消費時為何會有消息發(fā)送方的IP呢?而且該IP還不斷進行域名解析。
在消費時有通過MessageExt.bornHost.getBornHostNameString獲取消費這信息;問題由此引起。
public class MessageExt extends Message {
private static final long serialVersionUID = 5720810158625748049L;
private int queueId;
private int storeSize;
private long queueOffset;
private int sysFlag;
private long bornTimestamp;
private SocketAddress bornHost;
private long storeTimestamp;
private SocketAddress storeHost;
private String msgId;
private long commitLogOffset;
private int bodyCRC;
private int reconsumeTimes;
private long preparedTransactionOffset;
}
調(diào)用GetBornHostNameString獲取HostName時會根據(jù)IP反查DNS服務器;
InetSocketAddress inetSocketAddress = (InetSocketAddress)this.bornHost;
return inetSocketAddress.getAddress().getHostName();
將getBornHostNameString注釋或者直接返回IP,ECS的消費性能基本穩(wěn)定在3萬左右。
備注:感謝公司測試同學魏華和容器專家陶漢輝對性能一遍又一遍的測試和排查。
關于“如何排查RocketMQ一次消費性能問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。