我們遇到了一個場景,其中Linux環境中的空閒隊列佔用了磁盤空間。隊列存儲文件系統完全在websphere mq
我們的隊列管理器意外終止的文件系統已滿,我們需要清空將q文件帶回隊列管理器。
但實際上我們根本沒有任何消息在隊列中。這顯示了一個特定的隊列。
爲什麼磁盤空間在這裏?根源是什麼?
我們遇到了一個場景,其中Linux環境中的空閒隊列佔用了磁盤空間。隊列存儲文件系統完全在websphere mq
我們的隊列管理器意外終止的文件系統已滿,我們需要清空將q文件帶回隊列管理器。
但實際上我們根本沒有任何消息在隊列中。這顯示了一個特定的隊列。
爲什麼磁盤空間在這裏?根源是什麼?
WMQ不會實時收縮隊列文件。例如,隊列中有100條消息,並且您消耗了第一條消息。 WMQ不會縮小文件並將所有消息向上移動一個位置。如果它試圖爲每條消息執行此操作,則永遠無法獲得當前在產品中看到的吞吐量。
發生什麼是WMQ將在處理生命週期中的某些點收縮隊列文件。在隊列變空和文件縮小之間存在一些延遲,但是這種延遲通常很小以至於不明顯。
你所描述的在理論上一些非常具體的條件下進行然而這將是一個極其罕見的事件。事實上,在我一直使用WMQ的15年中,我只見過幾個縮減隊列文件的延遲甚至引人注意的實例。我猜想這裏實際發生的是你的一個假設或觀察是錯誤的。例如:
隊列實際是空的嗎?
是它實際上是填補了文件系統中的隊列文件?
是它甚至MQ?
我們經常看到的一個問題是,應用程序會嘗試將超過5,000條消息放入隊列並收到QFULL錯誤。然後大多數人做的第一件事是設置MAXDEPTH(999999999)以確保這再也不會發生。問題在於QFULL是應用程序可以恢復的軟錯誤,但填充文件系統是一個硬錯誤,可能會導致整個QMgr失效。設置MAXDEPTH(999999999)會爲致命錯誤交易可管理的軟錯誤。 MQ管理員有責任確保隊列上的MAXDEPTH和MAXMSGL設置爲底層文件系統不填充。在大多數商店中,對所有文件系統都進行了額外的監控,以在警報填滿之前提醒警報。
所以總結一下,在大多數情況下,WMQ在縮小隊列文件方面做得非常好。特別是,當一個隊列清空時,這是一個自然的同步點,文件可以被縮小,這通常發生在隊列清空的幾秒鐘內。你要麼遇到一種罕見的競爭條件,即文件沒有足夠快地收縮,或者在這裏有其他事情在你的初始分析中不明顯。在任何情況下,都應該管理MAXDEPTH和MAXMSGL,使得沒有隊列可以填充文件系統並編寫代碼來處理QFULL條件。