タグ付けされた質問 「out-of-memory」

1
OOMキラーはどのプロセスを最初に殺すかをどのように決定しますか?
この回答は、の値に基づいてOOM状況に遭遇したときにカーネルが実行するアクションを説明していますsysctl vm.overcommit_memory。 overcommit_memoryが0または1に設定されている場合、overcommit有効になり、プログラムは実際に使用可能なメモリよりも多くのメモリを割り当てることができます。 この状況でメモリが不足するとどうなりますか?OOMキラーはどのプロセスを最初に殺すかをどのように決定しますか?

2
/ var / log / messagesを使用してメモリ不足をデバッグする
次のレポートがメッセージログにスローされます。 kernel: Out of memory: Kill process 9163 (mysqld) score 511 or sacrifice child kernel: Killed process 9163, UID 27, (mysqld) total-vm:2457368kB, anon-rss:816780kB, file-rss:4kB この問題がのためのものhttpdであるmysqldかどうかは関係ありませんが、どうすれば問題のpostfixデバッグを続行できますか。 PID 9163がなぜ殺されたのか、そしてLinuxがどこかで終了したPIDの履歴を保持しているかどうかについての詳細情報を得るにはどうすればよいですか。 これがメッセージログファイルで発生した場合、この問題を段階的にトラブルシューティングする方法を教えてください。 # free -m total used free shared buffers cached Mem: 1655 934 721 0 10 52 -/+ buffers/cache: 871 784 Swap: 109 …

4
Linux Mintの「Webコンテンツ」アプリケーションの高い(合計に近い)CPU /メモリ使用量のデバッグ
私は自宅の3台のコンピューターにLinux Mintをインストールしていますが、Firefoxを開いているときはすべて、それらはほとんど使用できません。topからの出力は次のとおりです。 ご覧のとおり、「Webコンテンツ」とFirefoxは、ほぼすべてのCPUと50%(4GB以上)のシステムメモリをまとめて使用しています。 過去にDebianやUbuntuでこの問題が発生したことはありませんが、これまでにMintをインストールしたすべてのコンピューターで発生しています。この非常に高い(合計に近い)CPU /メモリ使用量は一定であり、コンピューターを使用できなくしています。 これを修正する方法についてのアイデアはありますか?修正がない場合、この「Webコンテンツ」アプリケーションが実行されないようにするにはどうすればよいですか?

2
OOMキラーが適切に機能せず、OSがフリーズする
何年もの間、私のオペレーティングシステムのOOMキラーは適切に動作せず、システムのフリーズにつながります。 メモリ使用量が非常に高い場合、プロセスを強制終了してメモリを解放するのではなく、システム全体が数時間または数日間「フリーズ」(実際には非常に遅くなる)する傾向があります。 記録した最大時間は、リセットを実行するために自分自身を辞任する7日前です。 OOMに到達しようとすると、iowaitは測定不能になる前に非常に高くなります(〜70%)。 ツール:すべてのプログラムがハードドライブから非常に高いスループット(数十MB /秒あたり)で読み取りを行っていることを示しています。 それらのプログラムは何を読んでいますか?iotop -ディレクトリ階層? -実行可能コード自体? 私は正確に今はしません。 [編集]このメッセージを書いた時点(2017年)で、最新のArchLinux(4.9.27-1-lts)を使用していましたが、この問題は数年前から既に経験していました。 さまざまなLinuxディストリビューションと異なるハードウェア構成で同じ問題が発生しました。 現在(2019年)、私は私が持っているuptodateのDebian 9.6(4.9.0)を使用しています16ギガバイトの物理RAM、私のOSがインストールされているSSDのではなく、任意のスワップパーティションを。 持っているRAMの量のため、スワップパーティションを有効にしたくありません。問題の出現を遅らせるだけです。 また、SSDを頻繁にスワップすると、ディスクの寿命が短くなる可能性があります。 ちなみに、スワップパーティションを使用して、または使用せずに試してみましたが、問題の出現を遅らせるだけで、解決策ではないことがわかっています。 私にとってこの問題は、Linuxがキャッシュから重要なデータをドロップするという事実によって引き起こされます。 Linuxが実行中のプログラムの実行可能コードページをドロップしないのではないかと考えています。 この問題を解決するために、いくつかのことを試しました。 1つは(1 GB)に設定/proc/sys/vm/min_free_kbytesすることでした1000000。 この1 GBは空いているはずなので、このメモリは重要なデータをキャッシュするためにLinuxによって予約されると思いました。 しかし、うまくいきませんでした。 また、私はそれを定義することによって、物理メモリのサイズに仮想メモリのサイズを制限し、理論的に大きな音ができても、それを追加するのに便利だと思う/proc/sys/vm/overcommit_memoryに2まともな技術的に可能な私の状況ではないが、アプリケーションの種類理由私が使用するものは、何らかの理由で実際に使用するよりも多くの仮想メモリを必要とします。 ファイル/proc/meminfoによると、Commited_AS値は多くの場合、システムの物理RAMの2倍よりも大きくなっています(16 GB、Commited_ASは多くの場合32 GBを超えています)。 私はこの問題を経験している/proc/sys/vm/overcommit_memoryデフォルト値にする:0、とのために私はそれを定義しているが:1、私はプログラムがで殺されるのが好ましいので、OOMキラー彼らはの戻り値をチェックしていないためではなく、誤って振る舞いますmalloc割り当ては拒否されます。 IRCでこの問題について話していたとき、このまったく同じ問題を経験した他のLinuxユーザーに会ったことがあるので、多くのユーザーがこれに懸念を持っていると思います。 私にとっては、Windowsでさえ高いメモリ使用量を処理できるため、これは受け入れられません。 さらに情報が必要な場合は、提案をしてください、教えてください。 ドキュメント: https : //en.wikipedia.org/wiki/Thrashing_%28computer_science%29 https://en.wikipedia.org/wiki/Memory_overcommitment https://www.kernel.org/doc/Documentation/sysctl/vm txt https://www.kernel.org/doc/Documentation/vm/overcommit-accounting https://lwn.net/Articles/317814/ 彼らはそれについて話します: なぜLinuxのメモリ不足(OOM)キラーは自動的に実行されず、sysrq-keyで動作するのですか? OOM-killerがリソース豚を殺さないことがあるのはなぜですか? OOM Killerのプリロード 強制スワップでOOM-killerをトリガーすることは可能ですか? OOM状況に近い高遅延を回避する方法 https://lwn.net/Articles/104179/ …

3
メモリ不足のメッセージとは何ですか:子供を犠牲にしますか?
私のコンピューターは最近、メモリ不足になりました(大規模なGISデータセットを操作しているときにソフトウェアをコンパイルすると予期しない結果になります)。OOM状態の処理方法の詳細を示すシステムログには、次の行があります。 Out of memory: Kill process 7429 (java) score 259 or sacrifice child それはどうor sacrifice childですか?確かに、物事を続けるために暗黒の儀式を考えているのではないでしょうか?

1
「memfd」を「ファイルを所有するプロセス」に説明されていると考えるのは間違っていますか?
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/ 理論的には、次のmemfd_create()ような新しいsyscallを導入せずに[ ]動作を実現できます。 int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU); (ここでtmpfsをより移植可能に保証するには、「/dev/shm」の代わりに「/tmp」を使用できます)。 したがって、最も重要な質問は、なぜ地獄には第三の方法が必要なのかということです。 [...] バッキングメモリは、ファイルを所有するプロセスに割り当てられ、mount-quotasの影響を受けません。 ^この文の最初の部分は信頼できないと思うのは正しいですか? memfd_create()コードは、文字通り「として実装されているカーネル内部でなければならない[A] TMPFSにリンクされていないファイル・リビング」。コードをトレースすると、LSMチェックを実装していない点が異なることを理解しています。また、ブログ投稿で説明しているように、「シール」をサポートするためにmemfdsも作成されています。ただし、me​​mfdsが原則としてtmpfileとは異なる方法で説明されることは非常に懐疑的です。 具体的には、OOM-killerがノッキングを起こすと、memfdsが保持しているメモリを考慮しないと思います。これは、RAMの最大50%(tmpfsのsize =オプションの値)になります。カーネルは内部tmpfsに異なる値を設定しないため、デフォルトサイズの50%を使用します。 したがって、一般に、大きなmemfdを保持するプロセスを期待できるが、他の重要なメモリ割り当てはOOMで強制終了されないでしょう。あれは正しいですか?

9
多数の小さなファイル(合計1TB)を圧縮および転送するときのメモリの問題
500万個のファイルがあり、約1 TBのストレージスペースを占有しています。これらのファイルを第三者に転送する必要があります。 これを行う最良の方法は何ですか?.tar.gzを使用してサイズを縮小しようとしましたが、コンピューターに8GBのRAMがあるにもかかわらず、「システムメモリ不足」エラーが発生します。 ファイルをカタツムリメールで送信するのに最適なソリューションはありますか?

2
httpdのメモリ使用量
httpd(Apache/2.2.29)メモリ使用量に問題があります。 時間が経つにつれて、httpdプロセスのメモリ使用量は徐々に増加し、最終的に100%になります。 最後に再起動したのhttpdは約24時間前でした。次からの出力free -m: [ec2-user@www ~]$ free -m total used free shared buffers cached Mem: 1655 1415 239 0 202 424 -/+ buffers/cache: 788 866 Swap: 1023 4 1019 それが間違いないことを証明するためにhttpd、私は再起動しhttpd、free -m再び走りました: [ec2-user@www ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] [ec2-user@www ~]$ free …

2
`make -j`(引数なし)は危険ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 今日何かを構築するとき、私は次のように実行することにしmakeました $ make -j おそらくcabal、-jデフォルトが妥当な制限に設定されている場合など、他のプログラムとは習慣がない。 約20秒後、デスクトップ全体が停止して停止します。活動のさまざまな兆候を探します。ファンは回転しません。HDDライトは緑色に点灯していますが、ディスクアクティビティが聞こえません。うーん。10分の沈黙の後、ようやく何年も前に行った最初のキー操作に対する応答がわかり、ディスクのスラッシングのあまりにも馴染みのある音も聞こえ始めます。20分後、この応答しないマシンの端末にゆっくりと進もうとすると、私は陥没してREISUBを使用しました。 最初は、関係のないデスクトップアプリケーションが原因であると考えました。これは、長い間、インタラクティブなbashセッションにメモリ制限を課して、このような状況に身を置くことができなかったためです。しかし/var/log/syslog、別の話をします。OOMキラーは、疑わしくパックされ、処理されているいくつかのpsダンプを残しました!c++cc1plus これらのダンプの1つの周波数分析を次に示します。 Command Number of appearances 'sh' 322 'c++' 321 'cc1plus' 321 'chrome' 27 'make' 27 'bash' 3 all else combined 120 だから私はGNU makeのmanページをチェックします:(強調を追加) -j [jobs]、-jobs [= jobs]同時に実行するジョブ(コマンド)の数を指定します。-jオプションが複数ある場合は、最後のオプションが有効です。 引数なしで-jオプションを指定した場合、makeは同時に実行できるジョブの数を制限しません。 私は、問題を再現できるかどうかを確認するには消極的だ(私が行うとき、それは痛い、医師をこれを ...)が、調査の結果は、これまでにホームランのように見える:明らかに、make -jそして得られたプロセスの数百人が持っている必要がありますとなってハングし、ディスクスラッシングの原因。そうは言っても、インターネットを検索しても、それに対する警告はあまりわかりません。私は結論に飛びついていますか? でmake -j、それは私には思われるほど危険な? もしそうなら、なぜそこにあるのですか、そしてそれをばか者に証明するために何ができるでしょうか?

2
Linuxカーネルのメモリ制限
困惑している問題があります。sgを使用してカスタマイズされたCDBを実行するライブラリがあります。sgのメモリ割り当てに日常的に問題があるシステムがいくつかあります。通常、sgドライバーには約4mbのハード制限がありますが、これらの少数のシステムでは〜2.3mbのリクエストでそれが見られます。つまり、CDBは2.3MBの転送を割り当てる準備をしています。ここに問題はないはずです:2.3 <4.0。 今、マシンのプロファイル。64ビットCPUですが、CentOS 6.0 32ビットを実行します(ビルドもしなかったし、この決定とは関係ありません)。このCentOSディストリビューションのカーネルバージョンは2.6.32です。16GBのRAMがあります。 システムでのメモリ使用量は次のようになります(ただし、このエラーは自動テスト中に発生するため、このerrnoがsgから返されるときの状態を反映しているかどうかはまだ確認していません)。 top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21 Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 15888480k total, 9460408k used, 6428072k free, 258280k buffers Swap: 4194296k …

1
OOM-Killerが、あまりにも多くを要求するプロセスを強制終了できないのはなぜですか?
ここでは、OOM-Killerを介して設定できることovercommit_memory、および次のことを説明します。 2 =オーバーコミットなし。あまりにも多くを求める場合、割り当ては失敗します。 0、1 =オーバーコミット(ヒューリスティックまたは常に)。殺すいくつかあまりにも多くのメモリが実際にアクセスしたときに、いくつかの経験則に基づいたプロセス(複数可)。 今、私はそれを完全に誤解しているかもしれませんが、割り当てられたメモリに実際にアクセスしようとするプロセスを強制終了するオプションがないのはなぜですか(またはなぜデフォルトではないのですか)?

3
デーモンのOOMキラー調整を永続的に設定する方法は?
単一または少数の重要なシステムサービスデーモンを使用していくつかのLinuxサーバーを実行している場合、何らかの異常が発生した場合に備えて、デーモン化されたプロセスのOOMキラーを調整したいと思います。たとえば、多くのapt-checkerプロセスがすべてのメモリを消費し、カーネルがMySQLを強制終了することをお勧めしているため、今日、MySQLを実行しているUbuntuサーバーが強制終了されたMySQLデーモンを取得しました。 /proc/$(pidof mysqld)/oom_score_adjファイルを使用してスコアを調整して、MySQLを削除することを好まない手がかりをカーネルに与えることができることは知っていますが、それでもサービスの再起動には耐えられません。これらの調整を含めるために、パッケージからinit / upstartスクリプトを編集する必要がありますか?パッケージに属するファイルを調整するので、これは非常にエレガントなソリューションではないと思います。一般にupstart / initスクリプトにフックし、条件付きで調整することは可能でしょうか?または、次のような無期限のスクリプトを実行することをお勧めしwhile true{ adjust_oom(); sleep 60;}ますか?

2
プロセスがOOMキラー/ cgroupによって強制終了される前に信号を受信します
このクラスターでは、メモリーなどのプロセスリソースを制限しています(memory.limit_in_bytes)。 結局のところ、これもLinuxカーネルのOOMキラーを介して処理されると思います(ソースコードを読むと、そのように見えます)。 プロセスが終了する前にシグナルを取得する方法はありますか?(SGEの-notifyオプションと同様に、プロセスが強制終了さqsubSIGUSR1れる前に送信されます。) 私は/dev/mem_notify ここについて読みましたが、それを持っていません-最近他に何かありますか?私もこれを読んで、ある程度関連性があるようです。 少なくとも小さなスタックトレースと他の有用なデバッグ情報をダンプできるようにしたいのですが、メモリを解放することで回復できるかもしれません。 私が現在使用している回避策の1つは、この小さなスクリプトです。このスクリプトは、上限(95%)に近いかどうかを頻繁にチェックし、上限に近い場合、プロセスにを送信しますSIGUSR1。Bashでは、このスクリプトをバックグラウンド(cgroup-mem-limit-watcher.py &)で開始しているため、同じcgroup内の他のprocを監視し、親Bashプロセスが停止すると自動的に終了します。

1
OOM Killer-MySQLサーバーを強制終了
私たちのMySQLマスターの1つで、OOM Killerが呼び出され、MySQLサーバーを停止したため、大規模な障害が発生しました。カーネルログは次のとおりです。 [2006013.230723] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0 [2006013.230733] Pid: 1319, comm: mysqld Tainted: P 2.6.32-5-amd64 #1 [2006013.230735] Call Trace: [2006013.230744] [<ffffffff810b6708>] ? oom_kill_process+0x7f/0x23f [2006013.230750] [<ffffffff8106bde2>] ? timekeeping_get_ns+0xe/0x2e [2006013.230754] [<ffffffff810b6c2c>] ? __out_of_memory+0x12a/0x141 [2006013.230757] [<ffffffff810b6d83>] ? out_of_memory+0x140/0x172 [2006013.230762] [<ffffffff810baae8>] ? __alloc_pages_nodemask+0x4ec/0x5fc [2006013.230768] [<ffffffff812fca02>] ? io_schedule+0x93/0xb7 [2006013.230773] [<ffffffff810bc051>] ? __do_page_cache_readahead+0x9b/0x1b4 [2006013.230778] …

1
スラブに割り当てられた再利用不可能なメモリは、使用済みまたは使用可能なキャッシュと見なされますか?
/ proc / meminfoを評価した後、次の情報が表示されます。 $cat /proc/meminfo MemTotal: 197852592 kB MemFree: 64755992 kB MemAvailable: 65655112 kB Buffers: 4388 kB Cached: 759952 kB SwapCached: 0 kB Active: 649472 kB Inactive: 308340 kB Active(anon): 193840 kB Inactive(anon): 25316 kB Active(file): 455632 kB Inactive(file): 283024 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4095932 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.