2

私は、Python スクリプトで私の Mac OS X で例外 OSError 24 (「開いているファイルが多すぎます」) が発生するという問題に直面しました。

何がその問題を引き起こしたのかわかりませんでした。lsof -p は約40〜50行を示し、私のulimitは1200でした(使用して確認します

resource.getrlimit(resource.RLIMIT_NOFILE)

)、タプル (1200, 1200) を返しました。だからギリギリでも限界を超えなかった。

私のスクリプトがいくつかのサブプロセスを生成し、共有メモリセグメントも割り当てたこと。共有メモリ セグメントの割り当て中に例外が発生しました。私はsysv_ipc モジュールを使用しています。

また、許可されている共有メモリ セグメントの合計数が十分に大きい (128 セグメント) こともわかっていました。

ipcs -b -m

明らかに少ない数 (40 セグメント以下) を与えました。

4

1 に答える 1

2

この問題は、共有メモリ システムの設定 (共有メモリ – wiki ) にありました。

ファイルには、各プロセスがアタッチできる共有メモリ セグメントの最大数を表すパラメータがありますkern.sysv.shmseg/etc/sysctl.confそのため、スクリプトには不十分な値 32 がありました。

パラメータを表示するには、次を使用します。

sysctl -A | grep shm

そのパラメーターを更新するには、ファイルを編集します。

sudo vim /etc/sysctl.conf

私は今そのように見えます:

kern.sysv.shmmax=564777216
kern.sysv.shmmin=1
kern.sysv.shmmni=700
kern.sysv.shmseg=128
kern.sysv.shmall=131072

設定を適用するには、システムを再起動する必要があることに注意してください。

現在割り当てられている共有メモリ セグメントを表示するには、次のように入力します。

ipcs -m -b

すべての共有メモリ セグメントを削除するには、次のようにします。

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done

どのプロセスにも関連付けられていないセグメントのみが実際に削除されることに注意してください。

共有メモリ設定の詳細: http://techjournal.318.com/general-technology/shared-memory-settings-explain/、http://www.spy-hill.com/help/apple/SharedMemory.html、http ://support.apple.com/kb/HT4022

于 2012-11-30T08:02:48.653 に答える