Linuxで開いているファイルと実行中のプロセスの数を制限する理由


14

オペレーティングシステムの内部動作についてあまり知識がありませんが、Linuxで開いているファイルと実行中のプロセスの最大数に制限があるのはなぜですか?

誰かが私を理解するのを助けることができればそれを感謝します。

回答:


16

これは主に歴史的な理由によるものです。古いLinuxメインフレームでは、多くのユーザーがメインフレームのリソースに接続して使用していました。もちろん、制限する必要があり、ファイルハンドルやプロセスなどの操作はカーネルに組み込まれているため、そこで制限されていました。また、フォーク爆弾のような攻撃を制限するのに役立ちます。プロセス制限を使用するフォームボムに対する防御はここに示されます

また、fork bombがしようとするのと同様に、暴走フォークとファイルのオープンを許可しないことにより、複雑なサービスとデーモンをチェックし続けるのに役立ちます。

また、使用可能なRAMとCPUの量、および32ビットカウンターが参照できるのはそれほど多くない(32ビットカウンターでカウントできる4294967296エントリのみ)が、そのような制限ははるかに大きいことに注意してください通常、プログラマーとシステム管理者によって設定されるものを超えています。とにかく、4294967296プロセスがあるずっと前から、マシンはおそらく計画どおりに、または別のリソースが不足してロックし始めたときに、おそらくリブートされていたでしょう。

Titanを584 TiBのメモリで実行しない限り(Linuxはスーパーコンピューター上で1つのインスタンスとして実行できないため、そうしません)、おそらくすぐにこのプロセス制限に達することはありません。それでも、共有メモリがないと仮定すると、平均的なプロセスには約146KBのメモリしかありません。


2
フォーク爆弾の+1は、これらの再帰的メソッドがシェルで注意せずに使用された場合にどれだけ危険かを示しました。
aka_learner

9

人生とLinuxの両方で、ほとんどすべてに制限があります。制限が非常に高く、心配する価値がない場合もあれば、低すぎる場合、怠programmerなプログラマーが勝手に設定する場合、またはハードウェアの制限によって設定される場合もあります。

プログラマーが住所などのフィールドで許可される最大文字数などの決定を行うと、任意の制限が発生します。必要に応じてメモリを動的に割り当てるよりも、任意の制限を設定する方がはるかに簡単です。使用可能なすべてのメモリを単純な入力フィールドに割り当てる必要はありませんが、重要な可能性のある他のメモリを入力で上書きすることはできません。開いているファイルとプロセスの場合、任意の制限があるか、利用可能なメモリによって制限される場合があります。後者の場合、制限に近づくと悪いことが起こり始め、システムがハングする可能性があります。そのため、それが起こる前に制限を有効にするとよい場合がよくあります。場合によっては、メモリまたはディスク容量に応じて、起動時に任意の制限が決定される場合があり、通常はかなりインテリジェントです。

次に、整数や文字のサイズなど、ハードウェアによって設定される制限があります。32ビットシステムの場合、整数の最大サイズ(符号なしの場合は4,294,967,295、符号付きの場合はその半分)によって設定される制限があります。


1
任意に見える制限は、実際には標準に基づいている場合があります。国際標準では、郵便住所行を39文字に制限しています。そのような制限はarbitrary意的に見えるかもしれません。アドレスの60文字の制限は、おそらく任意です。残念ながら、標準をチェックするプログラマが少なすぎるため、多くの(場合によっては正しい)制限がlimits意的に決定されます。
BillThor

同意する; 私がまだプログラマーとして働いていたとき、あなたが言ったように、またはOSでマクロ(max_pathなど)として定義されているように、指定された制限を探すのに多くの時間を費やしていました。しかし、特にフィールド長の場合、任意の制限は通常、制限なしよりも優れていると言わざるを得ません。:)
マーティフライド

7

プロセスの場合、/ proc / sys / kernel / pid_maxは許可される最大pidであるため、これはいつでも実行できるプロセス数のハード制限です。ただし、メモリの制限は通常、それよりもかなり前に機能します。

マシン全体で開いているファイルの上限については、/ proc / sys / fs / file-maxがハード制限です。これはマシンのメモリ量に基づいているため、変化します。カーネルはこれを次のように設定します。

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

1 MBのRAMごとに約100になります。

プロセスごとの制限は異なります。ulimitはこれらを定義します。


-5

コンピューターには制限があるため、制限があります。4GBのRAMがあるので、15のゲームを実行できません。

私はおそらく少し遅れてそれを実行することができますが、それは人間ではないでしょう、それはあなたのPCとLinuxのKernalの制限です、あなたに投げられたプログラムを保持できるように、より良いカーネルとたくさんのRAMが必要です。

Windows 7を実行したときのラップトップのように、Battlefieldをプレイできましたが、RAMの80%が必要だったため、「Need For Speed」をプレイしようとすると、通常60%かかります私は2つのヘビーデューティプログラムを実行しているため、速度が低下しました。どちらもRAM(ランダムアクセスメモリ)のために戦っています

簡単に言えば、通常のコンピューターは一度にたくさんのプログラムを実行することはできません。音楽、メモ帳、ブラウザー、メール、ゲーム、あなたはそれはコンピューター上ではたくさんあるが、それは単なるだと思いますコンピューターを苦労させます(高価なラップトップのように8〜16 GBのRAMがない限り!)


多くのプロセスが同時に実行されるとCPUの負荷が高くなり、CPUコアのトラフィックが非常に多く処理され、時間が経つとシステムがハング状態になり、適切な状態が得られないことがわかっているプロセスに関する情報に感謝します私が間違っていないかどうかを推測するために、実行するプロセスのいずれかへのタイムスライス しかし、なぜLinuxで開いているファイルにも制限があるのですか?
aka_learner

私は開いているファイルの制限について知りません、私はまったく経験していません、たぶんそれはあなたのコンピュータが私のものと比べて制限されているのかもしれません、私はそのことについて確信がありません。常に10個のファイルを開いています。次に、Webブラウザー、Music Player、およびターミナルを開きます。
ユービーアイソフトTerzuz

mysqlデータベースから「120428 20:30:01 [エラー] / usr / sbin / mysqld:ファイルを開けません: './djlabo_open/cart_layout.frm'(errno:24)」というメッセージが表示されると、一般的に私に起こります。 linuxはこのデータベースファイルを開かせないため、エラーログにエラーが表示されます。
aka_learner

これはおそらく、ファイルを開くためのOSの制限とは異なるものです。
ナネ

1
@Terzuzそれは、人々が互いの答えを事実上正しいと考えるかどうかに基づいています。多くの人(残念ながら私を含む)は、この答えが質問で言及されている制限ではなく、他の制限に実際に取り組んでいるかのように感じています。
モニカの復活-ζ--12年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.