linux系統增加訊息佇列長度

來源:互聯網
上載者:User

經常在建立訊息佇列呢,報錯No space left on device。

這時,可以通過修改MSGMNI這個參數來解決。

MSGMNI--- 這個參數決定了系統中同時啟動並執行最大的message queue的個數。

 

MSGMNI:/proc/sys/kernel/msgmni檔案中定義了該值;

  作用:該值定義了訊息佇列的最大長度;要使db2(7.1版)正常運行,其最小值為128;

  對於高負荷的DB2伺服器,可將該值調整為 >= 1024;

  調諧:對於2.4.6版本的核心,其預設值為16;可用以下兩種方法改變該值

  (1)如果只是臨時變動,在命令列輸入

      bash# sysctl -w kernel.msgmni=128 

  (2) 如果要在系統啟動時改變該值,可在/etc/sysctl.conf檔案中加入以下幾句:

  # Sets maximum number of message queues to 128

  # Set this to 1024 or higher on production systems

  kernel.msgmni = 128

  (用ipcs -l 命令來查看當前ipc 參數的各種設定)

 P.S.

另外幾個參數,

kernel.msgmni
kernel.msgmax
kernel.msgmnb

-----------------------------------------------------------------------------------

linux關於訊息佇列中訊息的大小的限制

在訊息佇列中,例如函數msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);這個函數調用的時候,msgsz最大隻能為8192,也就是2的16次方。可以看出這裡的msgsz大小限制在一個short型。超過這個大小就會出錯——invalid argument。並不是其他人所說的只要msgsz是mtext的大小就不會出錯,如果sizeof(mtype)+sizeof(mtext)<=8192時,msgsz為sizeof(mtype)+sizeof(mtext)大小也沒有關係。

當然msgsz這個大小也不是不可以改變,如果要變,就去核心代碼裡面關於實現訊息佇列的程式中把這個限制改變一下就好。(我沒試過,應該可以),一般是在核心源碼中的ipc檔案夾中會有mqueue.c這個c語言程式檔案,裡面會定義DFLT_MSGSIZEMAX為8192,這應該就是為什麼msgsz最大為8192的原因,如果要改,可以改掉,然後重新編譯核心。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.