Vm.overcommit_memory=2 is the right setting for servers

2025/12/17 19:45

Vm.overcommit_memory=2 is the right setting for servers

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Linux カーネルの

vm.overcommit_memory
sysctl は、メモリ割り当てが保証されるか単なる約束にすぎないかを決定します。overcommit が有効になっている場合(
vm.overcommit_memory=1
、デフォルト設定)、
brk(2)
mmap(2)
などの呼び出しは常に成功しますが、実際の物理ページは最初のページフォルト時にのみ確保されます。この遅延は、成功した割り当てを後で OOM キラーを起動する可能性のある延期された約束へと変え、実際の割り当て失敗を隠蔽し、スタックトレースなしに静かに SIGKILL が発生する原因となります。
Redis は overcommit が無効の場合に「Memory overcommit must be enabled! …」という警告を出しますが、この警告は根本的な問題(例:jemalloc issue #1328)を隠す可能性があります。この記事では、overcommit に依存するコードは責任を開発者からカーネルへ移転し、メモリ集約型サービスでの静かなクラッシュを招くと主張しています。
overcommit を有効にするには、
/etc/sysctl.conf
vm.overcommit_memory = 1
を追加して再起動するか、あるいは
sysctl vm.overcommit_memory=1
を実行します。適切なエンジニアリングでは、低メモリ状態を明示的に検出し、overcommit 警告に頼らずに割り当て時に開発者へ即座にフィードバックするべきです。

本文

Linux カーネルには、メモリ割り当ての挙動を調整できる機能があります。
それは

vm.overcommit_memory
という sysctl パラメータです。

overcommit を有効にすると(残念ながらデフォルトでこの設定になっています)、カーネルはプログラムがヒープサイズを増やすために

brk(2)
mmap(2)
を呼び出した際、実際にメモリが利用可能かどうかに関わらずマッピングを返します。
一見すると便利そうです。

しかし実際にはそうではありません。overcommit はアプリケーション開発者にとって手軽ですが、メモリ割り当ての契約そのものを根本的に変えてしまいます。成功した割り当てはもはや「実際のリソースを原子操作で確保した」ことを意味しなくなります。返されるマッピングは「遅延保証」のようなもので、ページフォルトハンドラがメモリに初めてアクセスされたときにだけ実際に満たされます。この違いは重要です。overcommit は失敗を即座に検出するトランザクションモデル(fail‑fast)から、失敗が発生した時点ではなく後でのみ捕捉される best‑effort モデルへと置き換えるためです。

実際にどのように遅延が働くかを理解するには、プログラムが

malloc(3)
を呼び出して新しいメモリ領域を確保しようとしたときに何が起こるかを考えてみましょう。高レベルでは、アロケータはカーネルに対して追加の仮想アドレス空間(VMA: Virtual Memory Area)を要求するため
brk(2)
または
mmap(2)
を呼び出します。

overcommit が無効になっているシステムでは、カーネルは割り当てが成功する前に十分なバックングメモリ(物理メモリ)が確保できることを保証します。対照的に overcommit が有効の場合、カーネルは VMA オブジェクトだけを作成し、バックングメモリの利用可能性は保証しません。その結果、マッピングは即座に成功したように見えますが、実際にはその要求が最終的に満たせるかどうかは分からない状態です。

「成功」と「バックングメモリの確保」が切り離されると、割り当て失敗を正しく処理することが不可能になります。プログラムはカーネルが実際に要求を満たせるかどうか判断する前に、割り当てが成功したものとして扱わざるを得ません。overcommit を無効にすれば、割り当て時に受け入れ制御(admission control)が行われます。これにより、割り当ては即座に失敗するか、バックングメモリが保証された状態で成功します。


失敗の局所性はデバッグにとって重要

割り当てが早期に失敗すると、その失敗は要求と同期しているため、デバッグが格段に楽になります。もしプログラムが割り当て失敗でクラッシュした場合、失敗時点のコンテキスト(要求サイズ、割り当てを行っているサブシステム、必要な基礎操作)がすべて保持されます。

overcommit では、この局所性は設計上失われます。割り当てが成功したように見え、プログラムはメモリが利用可能だと仮定して進みます。しかし実際にアクセスされた時点でカーネルは OOM キラーを起動し、プロセスを即座に終了させることがあります。プログラム側から見ると「割り当て失敗」を処理する手段がなく、単なる

SIGKILL
しか発生しません。運用者の観点ではスタックトレースが失われ、後で確認できるログだけが残ります。これらは多くの場合、何が起きたかを明確に描写していないことがあります。

「割り当てサイトでクラッシュをデバッグしたほうがいいですか?それとも非同期 OOM キルによって発生した障害を再構築する方がよいですか?」
overcommit は割り当て失敗を回復可能にしません。むしろ「報告できない」状態にしてしまいます。


ちょっとだけ注意すべき例:Redis

それでは、なぜこのことを書いているのか? overcommit のコストは技術的側面だけでなく、悪いエンジニアリング文化をも示しています。すなわち「正しさに対する責任」をアプリケーション開発者からカーネルへ移転してしまっているのです。

例として、overcommit を無効にした状態で Redis を起動すると、以下のような警告が出ます:

WARNING Memory overcommit must be enabled!
Without it, a background save or replication may fail under low memory condition.
Being disabled, it can also cause failures without low memory condition,
see https://github.com/jemalloc/jemalloc/issues/1328.
To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot
or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.

この警告は、overcommit が無効になっていることを知らせるだけで、実際に必要なメモリ割り当てエラーを正しく処理できていないコードがあることを示唆しています。対策としては「overcommit を有効にする」よりも、「低メモリ状態を明示的に表現し、システム管理者がそれを理解・解決できるようにする」の方が適切です。

同じ日のほかのニュース

一覧に戻る →

2025/12/20 7:13

CSS Grid Lanes

## Japanese Translation: > **Safari Technology Preview 234 は CSS Grid Lanes を導入しました**。これは、開発者が JavaScript なしで CSS 内で直接モザイク風グリッドを構築できる新しいレイアウトモードです。 > > 開発者は `display: grid-lanes;` と標準の Grid 構文(`grid-template-columns`、`repeat(auto-fill, …)` など)を組み合わせて柔軟なレーンを作成します。アイテムは自動的に最も近い上部レーンに配置され、無限スクロールとタブフレンドリーなナビゲーションが可能になります。 > > **高度な機能** には、レーンサイズの変更(`minmax(8rem, 1fr) minmax(16rem, 2fr)`)、アイテムの跨ぎ(`grid-column: span N`)、明示的配置(`grid-column: -3 / -1`)および新しい `item-tolerance` プロパティ(デフォルトは `1em`)が含まれます。これは、サイズ差に基づいてアイテムがレーンをどれだけ積極的にシフトするかを制御します。レーンは列方向(「ウォーターフォール」)または行方向(「レンガレイアウト」)で向きを設定でき、デフォルトの流れは通常です。 > > 実装は 2022 年中頃に開始され、Safari TP 234 で利用可能です。ライブデモは <https://webkit.org/demos/grid3>(写真ギャラリー、ニュースレイアウト、博物館サイト、メガメニューフッター)でホストされています。CSS Working Group はまだプロパティ名と向きの構文(`grid-lanes-direction` か `grid-auto-flow` の再利用)を最終化中です。その決定が下り次第、この機能は本番環境で使用できるようになります。 > > 開発者にとって、これは追加の JavaScript を必要とせず、より高速でパフォーマンスの高いレスポンシブレイアウトを実現することを意味し、ブラウザベンダーは同様の機能を採用する可能性があり、将来のウェブデザイン標準に影響を与えるでしょう。

2025/12/19 0:01

Mistral OCR 3

## Japanese Translation: Mistral OCR 3 は、従来のエンタープライズツールと AI ネイティブ競合他社の両方を上回る高精度な OCR モデルです。フォーム、スキャン文書、複雑な表、および手書き文字に対して Mistral OCR 2 と比較し、全体で 74 % の勝率を達成します。このモデルは、1,000 ページあたり $2(50 % Batch‑API 割引適用で 1,000 ページあたり $1)と価格設定されており、シンプルな API または Mistral AI Studio のドラッグ&ドロップ Document AI Playground を通じてアクセスできます。 主な強みは次のとおりです: * **手書き文字サポート** – 連続体文字、混合内容、および印刷フォーム上の手書き文字。 * **フォーム処理** – 請求書、領収書、コンプライアンスフォーム、政府文書におけるボックス、ラベル、手書き入力、および密集レイアウトの検出を改善。 * **頑健性** – 圧縮アーティファクト、傾斜、歪み、低 DPI、背景ノイズ、複雑なレイアウトに対処。 * **表再構築** – ヘッダー、結合セル、多行ブロック、および列階層を完全にサポートし、colspan/rowspan を含む HTML テーブルタグ付きの拡張マークダウンを出力。 初期採用者はすでに Mistral OCR 3 を高ボリュームのエンタープライズパイプラインに統合しています:請求書を構造化フィールドへ変換、会社アーカイブのデジタル化、技術レポートからクリーンテキストを抽出、および企業検索の強化。精度、コスト効果、柔軟な展開の組み合わせにより、大規模文書処理を業界横断で変革できる競争力ある代替手段として位置づけられています。

2025/12/20 8:59

PBS News Hour West to go dark after ASU discontinues contract

## Japanese Translation: ## Summary アリゾナ州立大学(ASU)のウォルター・クロンスキー報道学部は、PBS NewsHour Westとのパートナーシップを更新しないことを決定し、2019 年から ASU のダウンタウンフェニックスキャンパスで運営されていた事務所を実質的に閉鎖しました。この動きは「ASUの優先事項の変更」に起因すると、News Hour Productions の GM 兼 WETA EVP/CCO のマイケル・ランチリオが述べました。PBS およびアリゾナ PBS は追加説明を行わず、ASU に感謝し、地域ニュースへの継続的な取り組みを約束しました。 閉鎖により、西海岸で 20 % 以上の視聴者に到達することを支援していた西部本部としての事務所の役割が終了します。また、ASU のジャーナリズム学生(例:AJ Ceglia 学長)に実地報道経験と就職機会を提供していたインターンシッププログラムも消滅します。現在のインターンは学術クレジットを受け取りますが、卒業要件を満たすために代替配置を探す必要があります。 PBS NewsHour West の最終全国放送は 12 月 19 日に行われます。クロンスキー建物は、事務所閉鎖前に学校のサポートを称える形で夜間放送に登場しました。この報道は *The State Press* のジュニアレポーター、エマ・ブラッドフォード(連絡先:elbradfo@asu.edu; X @emmalbradford)によって取り上げられました。彼女も ASU のジャーナリズム/メディアコミュニケーション学部の学生です。 この決定は、西米国における地域ニュースの報道を減少させ、PBS の視聴者エンゲージメントを低下させ、新進気鋭のジャーナリストのプロフェッショナルパスウェイを制限する可能性があります