使其「儘可能大是合理的」。例如,如果你可以使用1Gb的內存,那麼分配它的大小爲1Gb,除以隊列中對象的平均字節數。
如果我不得不選擇一個「合理」的號碼,我會從10000
開始。原因是,如果它增長到比這更大,那麼增大它並不是一個好主意,並且不會有太大幫助,因爲顯然日誌記錄要求超過了你的日誌記錄能力,所以是時候退出客戶端。
「調整」通過實驗通常是最好的方法,因爲它依賴於應用程序的配置文件:
- 如果有高點和低點在應用程序的活動,那麼較大的隊列將幫助「平穩out「你服務器上的負載
- 如果你的應用程序有一個相對穩定的負載,那麼較小的隊列是適當的,因爲只有一個較大的隊列延遲當客戶端被阻止時的不可避免的一點 - 你最好把它做得更小,將更多資源(更多的日誌記錄線程)用於消耗工作。
還要注意的是一個非常大的隊列可能影響垃圾收集的響應,以釋放內存,因爲它要遍歷一個更大的堆(隊列中的所有對象),每次運行時,兩個增加負荷CPU和內存。
您希望儘可能縮小尺寸,而不會影響吞吐量和響應速度。爲了評估這一點,你需要建立一個測試服務器,並用一個典型的負載來查看發生了什麼。請注意,您可能需要從多臺計算機上獲取它才能在服務器上實現負載,因爲從一臺計算機上啓動它可以限制由於測試客戶端計算機上的CPU核心和其他資源數量而造成的負載。
說實話,我只是做了大小10000
和調整工作線程的數量,而不是隊列大小。
這聽起來像你想弄清楚設置隊列的大小。這是一個準確的陳述嗎? –
據我所知,在我的代碼在服務器上運行之前,無論是壓力測試還是模塊測試,我都需要知道近似值。我在多線程程序中很弱,是否有一種準確或近似的語句估計它? –