徵兆:
用戶端無法建立新的連線。
用戶端無法自動重新連線失敗的連線。
可能原因:
可能原因:用戶端應用程式未關閉連線,導致連線數目超過資源限制。
若要確認此問題的原因:列出代理程式的所有連線:
imqcmd list cxn
輸出會列出所有連線和建立每個連線的主機,從而瞭解哪些用戶端開啟了過多的連線。
若要解決此問題:重新寫入違例用戶端,以關閉不使用的連線。
可能原因:未執行代理程式或網路連結發生問題。
若要確認此問題的原因:
使用 Telnet 連線至代理程式主要連接埠 (例如,預設的 7676 連接埠),並透過連接埠對映器的輸出來驗證代理程式是否作出回應。
驗證代理程式程序是否在主機上執行。
若要解決此問題:
啟動代理程式。
修復網路連結問題。
可能原因:連線服務不在使用中或已暫停。
若要確認此問題的原因:檢查所有連線服務的狀態:
imqcmd list svc
如果連線服務狀態顯示為 unknown 或 paused,則用戶端無法使用該服務建立連線。
若要解決此問題:
如果連線服務狀態顯示為 unknown,此服務不會顯示在使用中服務的清單 (imq.service.active) 上。在 SSL 型服務中,服務也可能會配置錯誤,造成代理程式在代理程式記錄中產生以下項目:
ERROR [B3009]: Unable to start service ssljms: [B4001]: Unable to open protocol tls for ssljms service...
此項目後面是發生異常的基本原因說明。
若要正確配置 SSL 服務,請參閱訊息加密。
如果連線服務狀態顯示為 paused,請重新繼續該服務 (請參閱暫停和重新繼續連線服務)。
可能原因:可用於所需連線數目的可用執行緒太少。
若要確認此問題的原因:檢查代理程式記錄中的以下項目:
WARNING [B3004]: No threads are available to process a new connection on service ... Closing the new connection.
並且使用下列其中一種格式,檢查連線服務上的連線數目,以及目前使用中的執行緒數目:
imqcmd query svc -n serviceName imqcmd metrics svc -n serviceName -m cxn
每個連線均需要 2 個執行緒:一個用於內送訊息,另一個用於外寄訊息 (請參閱執行緒池管理)。
若要解決此問題:
如果您使用專用執行緒池模型 (imq. serviceName.threadpool_model= dedicated),那麼最大的連線數目是執行緒池中最大執行緒數目的一半。因此,若要增加連線數目,請增加執行緒池的容量 (imq. serviceName.max_threads),或改為使用共用執行緒池模型。
如果您使用共用執行緒池模型 (imq. serviceName.threadpool_model=shared),那麼最大的連線數目是連線監視限制 (imq.serviceName.connectionMonitor_limit ) 與最大執行緒數目 (imq. serviceName.max_threads) 積的一半。因此,若要增加連線數目,請增加執行緒池的大小或增加連線監視限制。
可支援的連線數目 (或連線上的流量) 最終會達到輸入/輸出限制。在此情況下,請使用多代理程式叢集,以分發叢集中代理程式實例上的連線。
可能原因:Solaris 或 Linux 平台上要求用於連線數目的檔案描述元太少。
如需有關此問題的更多資訊,請參閱設定檔案描述元限制。
若要確認此問題的原因:檢查代理程式記錄中是否有以下相似項目:
Too many open files
若要解決此問題:增加檔案描述元限制,如 ulimit 線上手冊所述。
可能原因:TCP 積存區會限制可同時新建連線請求的數目。
TCP 積存區會限制同時儲存在系統積存區內的連線請求數目 (imq.portmapper.backlog ),連接埠對映器會在超過此限制之後拒絕其他請求。(Windows 平台上有程序內定的積存區限制:Windows 個人版作業系統的數目限制為 5 個,Windows 伺服器版作業系統的數目為 200 個。)
因為不會經常出現同時有大量的連線請求,所以因儲存區限制的請求拒絕通常為短暫現象。
若要確認此問題的原因:檢查代理程式記錄。首先,檢查代理程式在拒絕其他連線的同時是否有接受某些連線。接著,檢查拒絕連線的說明訊息。如果找到這類訊息,可能不是 TCP 積存區的問題,因為代理程式不會記錄 TCP 積存區造成的拒絕連線。如果記錄中有成功的連線,但是未記錄任何拒絕連線,則可能是 TCP 積存區的問題。
若要解決此問題:
將用戶端設定成每隔一小段時間就重試連線 (此方法通常可行,因為這是暫時性的問題)。
增加 imq.portmapper.backlog 的值。
檢查用戶端關閉和開啟連線的次數是否過於頻繁。
可能原因:作業系統限制同步運作中連線的數目。
Windows 作業系統授權會限制所支援的同步運作遠端連線的數目。
若要確認此問題的原因:檢查可用於連線的執行緒數目是否夠用 (使用 imqcmd query svc),並檢查 Windows 授權合約的條款。如果您是從本地用戶端建立連線,而不是從遠端用戶端,作業系統限制可能是造成此問題的原因。
若要解決此問題:
升級 Windows 授權,以允許更多的連線。
設定多代理程式叢集,以分發一些代理程式實例的連線。
可能原因:使用者的認證或授權失敗。
認證可能因為下列任一原因而失敗:
密碼不正確
使用者儲存庫中沒有使用者的項目
使用者沒有存取連線服務的權限
若要確認此問題的原因:檢查代理程式記錄中是否有 Forbidden 錯誤訊息的項目。這表示有驗證錯誤,但不表示為問題發生的原因。
如果您使用檔案式使用者儲存庫,請輸入以下指令:
imqusermgr list -i instanceName -u userName
如果輸出顯示有使用者,則可能是提交了錯誤的密碼。如果輸出顯示下列錯誤,則使用者儲存庫中沒有該使用者的任何項目:
Error [B3048]: User does not exist in the password file
如果您使用 LDAP 伺服器使用者儲存庫,請使用適當的工具檢查是否有使用者的任何項目。
檢查存取控制特性檔案,查看是否有存取連線服務的限制。
若要解決此問題:
如果使用的密碼錯誤,請提供正確的密碼。
如果使用者儲存庫中沒有使用者的任何項目,請增加一個項目 (請參閱寫入和管理使用者儲存庫)。
如果使用者沒有存取連線服務的權限,請編輯存取控制特性檔案以授予這類權限 (請參閱連線服務的存取控制)。