最近公司的其中的乙個集群的solr出現了乙個比較奇怪的事情,先簡單說說以下的情況
機器a是前端的邏輯應用
機器b是具體乙個 solr 應用
很通用的方式都是從機器a向機器b的 solr 拿搜尋結果並呈現給前端,機器a與機器b處於千兆區域網路。
前端的同事反應有時候, solr 返回的 qtime 很快,但實現搜尋出來的結果時間卻很久,我大概畫了乙個圖,讓大家更明白。
如上圖所示,前端的同事在請求 solr 的方法前後加了時間計算,就是請求的所有時間,再前去 solr 反回的 qtime ,則就是網路的響應時間了。前端的同事發現,有些情況下,當然不是特定的條件,qtime 返回一般只就 100 ms 到 200 ms ,但網路的響應時間卻比qtime 大很多,經常是1秒甚至更長。
找尋問題的根源:
1. 基於這乙個情況,當時我認為是內部的網路有問題,但通過機器之前的同步檔案,速度也非常快,似乎都不存在過多的網路延時。
2. 因為 solr 那端是用了 tomcat ,當時有想過是否 tomcat 的連線池原因?通過更改 server.xml 的引數,問題似乎依然,但如果直通訪問 tomcat 上的網頁速度非常快,也看不出什麼任何延時。
3. 會不會是 linux 主機的 sokcet 連線數,引數等影響了?因為機器安裝上去後,我是看到並沒有對 /etc/syscotl.conf 的引數做調整過,機器a與機器b也調整過了,但問題依舊。
4. 因為前端的機器a是用了 httpclient 的,把 httpclient 的連線池,引數等也調整過,問題依舊,最後把 httpclient 完全去掉了,改用了普通的 socket ,效果有一點點的改善,但不明顯。
最後似乎都是無計可施了。。。。,按字面的理解,qtime 就是搜尋的總用時。
在檢視**的情況下,在各搜尋模組的 component 的 prepare , process 的時間都非常快,與qtime 很符合,當時我認為,搜尋的過程就這樣子了,時間很快哦,難道是把搜尋的結果寫回機器a時很久了?
最後在自己最不認為是問題的**塊中新增了乙個時間檢查,如下:
就從表面上來說,這段**是所有的搜尋操作都完成後,需要把搜尋的結果 solrrsp 寫到網路並回傳到機器a的前端去,但這個時間耗用的時間與響應時間非常吻合,看來時間就是耗用在這個了,而且乙個偶爾的發現,如果把solr 引數 rows=0 的時候,發現所有的響應時間非常短,都在幾毫秒完成了。但就算 rows=1 也好,響應時間都有幾十毫秒,這裡我突然間意識到,在裡面,肯定還有讀寫硬碟的操作並非僅僅是把結果寫回網路中。
最後深入看**後,發現了,其實 solrrsp 只拿到 docid, 具體的文件的內容,還需要通過 docid 從硬碟中讀回來。正正就是這段時間損耗了,因為 qtime 在這之前已經結束了,並沒有算上這一部分時間,導致了誤解了 qtime 的與網路響應時間之前的關係。以 binaryresponsewriter 為例子,時間都用在以下的**裡面的
因為群集中的索引比較大,乙份索引約20g左右,這機器總有4份,約80g左右這時讀取索引的內容反而成了瓶頸了。
解決的方案:
乙個能緩解這種情況的方法就是在 solrconfig.xml 中,把 docscache 加大到100w甚至更大,這個只能對於之前讀取過的 doc 才能有效,所以這種方式只能是暫時緩解沒有根本解決。
乙個比較徹底解決的是,在啟動的過程,通過 index.termenum 把索引的所有相關的內容都採用延時載入到乙個 陣列中,乙個 2000w ,只要記憶體有16g以上那並不是什麼難題。對於這麼大的的資料量,肯定是只有乙份索引在新增新的索引,其他的索引保持不變,就算有刪除了資料,也不會 optimize ,所以這種方式還是能根本上解決以上的問題。
效能優化之PHP優化
1.使用apache下的ab工具進行效能測試 測試 ab n100 c100 請求100次,併發量是100 關注兩個量 requests per second 每秒請求數 和time per request 平均響應時間 2.盡量使用php內建變數,常量,函式,原因 php 需要經過zend引擎獨行...
python 之效能優化
類似 os.linesep 這樣的名字需要直譯器做兩次查詢 1 查詢os 以確認它是乙個模組,2 在這個模組中查詢 linesep 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...
Android Studio之效能優化
使用android studio進行開,隨著專案的增大,依賴庫的增多,構建速度越來越慢,現在最慢要6分鐘才能build乙個release的安裝包,在網上查詢資料,發現可以通過一些配置可以加快速度,這裡跟大家分享一下。開啟gradle單獨的守護程序在下面的目錄下面建立gradle.properties...