SIerで働いているITインフラエンジニアです。
Linux / ITインフラを「図解」で発信しています。
主なテーマは、
Linux / CPU / Memory / I/O / Network / DB / Middleware / Virtualization。
トラブルシューティングや性能解析など、現場で役立つ知識を中心にまとめています。
「知っている」から「説明できる」へ。
皆さんと一緒に楽しくスキルアップしていけたら嬉しいです!
📝 Blog
eeengineer.com/
📚 Kindle|Linux技術書
amazon.co.jp/stores/author/B…
✅ Habicheck|習慣管理アプリ
habicheck.eeengineer.com/
#Linux #インフラエンジニア #Troubleshooting
🤖 Made with AI
Linuxのスケジューラは、どうやってCPU時間を公平に配分しているのでしょうか?
重要なのが「vruntime(仮想実行時間)」です。
vruntimeは実際のCPU実行時間をnice値に応じて補正したもの。
・nice値が小さい → vruntimeがゆっくり増加
・nice値が大きい → vruntimeが速く増加
Linux 6.6以降のEEVDFでは、lagとVirtual Deadlineを使って実行対象を選択します。
CPUのスケジューリングについての詳細は、以下も参照ください👇
eeengineer.com/linux-cpu-sch…
#Linux #LinuxKernel #CPU #インフラエンジニア
LinuxのCPUスケジューリング、仕組みの違いを理解していますか?
Linuxには主に3種類のスケジューリングポリシーがあります。
① 通常タスク(SCHED_OTHER)
CFS / EEVDFでCPU時間を公平に配分
② リアルタイムタスク(FIFO / RR)
固定優先度で実行。RRは同一優先度で時間片を使って交代
③ デッドラインタスク(DEADLINE)
EDFで期限の早いタスクを選択し、CBSでCPU実行時間を制御
詳細は以下でまとめているので、合わせて参照ください👇
eeengineer.com/linux-cpu-sch…
#Linux #LinuxKernel #インフラエンジニア
LinuxのCPUスケジューリング、仕組みの違いを理解していますか?
Linuxには主に3種類のスケジューリングポリシーがあります。
① 通常タスク(SCHED_OTHER)
CFS / EEVDFでCPU時間を公平に配分
② リアルタイムタスク(FIFO / RR)
固定優先度で実行。RRは同一優先度で時間片を使って交代
③ デッドラインタスク(DEADLINE)
EDFで期限の早いタスクを選択し、CBSでCPU実行時間を制御
詳細は以下でまとめているので、合わせて参照ください👇
eeengineer.com/linux-cpu-sch…
#Linux #LinuxKernel #インフラエンジニア
EEVDF(Earliest Eligible Virtual Deadline First)は、LinuxのCPU Schedulerが「次にどのタスクを実行するか」を決める仕組みです。
大まかな流れは以下の通りです。
① Runnableなタスクを確認
② eligibility で「CPUを受け取る資格」があるか判定
③ 資格のあるタスク同士で virtual deadline を比較
④ 最も早いタスクを選んでCPUで実行
詳細は以下をご覧ください👇
eeengineer.com/linux-cpu-sch…
#Linux #EEVDF #CPU #Scheduler #インフラエンジニア
LinuxのI/O性能調査、iostat・iotop・pidstatをどう使い分けていますか?
3つのコマンドは、確認する対象と目的が異なります。
🔹 iostat【デバイス単位】
ディスクごとのI/O量・待ち時間(await)・キュー長を確認。どのデバイスでI/Oが滞留しているかを分析。
🔹 iotop【プロセス単位・リアルタイム】
現在、どのプロセスがどれだけI/Oを発生させているかを確認。I/O負荷の高いプロセスを素早く発見。
🔹 pidstat【プロセス単位・統計分析】
プロセス別のRead/Write量やI/O待ちを定期的に取得。特定プロセスの負荷傾向や変化を分析。
I/O関連トラブルシューティングについて、合わせて以下を参照ください👇
eeengineer.com/linux-io-perf…
#Linux #iostat #iotop #pidstat #インフラエンジニア
pidstat、なんて読むか知っていますか?
「ピッドスタット」と読みます。
Process / Thread単位でCPU・Memory・I/Oなどを確認できるコマンド。
topで全体を確認 → pidstatで深掘り。
障害調査で覚えておきたいコマンドです。
#Linux #Troubleshooting #インフラエンジニア
LinuxのCPU Affinity、意識して設定していますか?
CPU Affinityは、プロセスやスレッドを実行できる論理CPUを制限する仕組みです。
主なメリットは、
・CPU間のMigrationを削減
・CPU Cacheの再利用効率を改善
・NUMAを考慮した配置で性能を安定化
ただし、CPUを専有するわけではなく、制限しすぎると逆に性能が悪化することも。
Linux Schedulerの動作を理解したうえで設定することが重要ですね。
#Linux #CPU #PerformanceTuning #インフラエンジニア
Linuxでは、プロセスやスレッドをカーネル内部で「タスク」として管理し、CPUスケジューラが実行するタスクを選択します。
大まかには以下の流れでCPUが実行されます
プロセス
↓
スレッド
↓
タスクとして管理
↓
CPUスケジューラが選択
↓
CPUコアで実行
複数のCPUコアがあれば、異なるタスクを並列に実行することもできます。
詳細は以下を参照ください!
LinuxプロセスとCPUの仕組みを徹底解説|スレッド・状態遷移・CPU実行まで
#Linux #LinuxKernel #CPU #インフラエンジニア
Oracle DatabaseのMemory監視、SGAとPGAだけ見ていませんか?
Memoryの使用量だけでなく、SQLの処理性能への影響も確認することが重要です。
・SGA:領域サイズ・Resize
・Buffer Cache:Logical / Physical Read
・Shared Pool:Hard Parse・Cursor共有
・PGA:使用量・TEMP I/O
・Linux:Swap・Memory Pressure
OracleとLinuxを横断して分析することが大切です。
詳しくはこちら👇
eeengineer.com/oracle-memory…
#OracleDatabase #Database #性能分析 #インフラエンジニア
LinuxのKernelが使うメモリ、どこまで確認していますか?
プロセスのRSSだけでは、Kernelが消費するメモリの内訳は分かりません。
そんなときに役立つのが slabtop です。
特に確認したいのは、
・CACHE SIZE:Cache全体のメモリ使用量
・NAME:dentry、inodeなどのCache名
・OBJS / ACTIVE:オブジェクト数と使用状況
特定のSlab Cacheが増え続けていないか、時系列で確認することも重要です。
メモリ関連のトラブルシューティングについて、以下でまとめてるので合わせて参照ください👇
eeengineer.com/linux-high-me…
#Linux #メモリ管理 #トラブルシューティング
LinuxのKernelが使うメモリ、どこまで確認していますか?
プロセスのRSSだけでは、Kernelが消費するメモリの内訳は分かりません。
そんなときに役立つのが slabtop です。
特に確認したいのは、
・CACHE SIZE:Cache全体のメモリ使用量
・NAME:dentry、inodeなどのCache名
・OBJS / ACTIVE:オブジェクト数と使用状況
特定のSlab Cacheが増え続けていないか、時系列で確認することも重要です。
メモリ関連のトラブルシューティングについて、以下でまとめてるので合わせて参照ください👇
eeengineer.com/linux-high-me…
#Linux #メモリ管理 #トラブルシューティング
Linuxのプロセスのメモリ使用量、RSSだけで判断していませんか?
RSS・PSS・USSは、共有メモリの扱いが異なります。
・RSS:共有メモリを全量計上
・PSS:共有メモリをプロセス間で按分
・USS:専有メモリのみ計上
RSSを複数プロセスで合計すると、共有メモリが重複計上され、実際の物理メモリ消費より大きくなる場合があります。
一方、PSSは共有分を按分するため、プロセスごとの実質的なメモリ使用量を評価するのに適しています。
メモリ関連トラブルシューティング詳細については、以下で説明しているので合わせてご参照ください👇
eeengineer.com/linux-high-me…
#Linux #メモリ管理 #トラブルシューティング
仮想サーバのvCPU数、どう設計していますか?
HTを有効にすると、32物理コアが64論理CPUに。
ただし、CPU性能が2倍になるわけではありません。
同じ物理コアのリソースを共有するため、スレッド単位の性能が低下する場合もあります。
ミッションクリティカルにおいては、私は以下の考え方で設計しています。
・物理コア数を基準にサイジング
・HTは追加の性能余力として評価
・CPU Readyや応答時間を実測
皆さんどのような方針で設計してますかね?
#VMware #Nutanix #仮想化 #インフラエンジニア
Hyper-Threading(SMT)は、常に性能が上がるわけではないので注意が必要です。
同じ物理コアの実行リソースを2つのスレッドで共有するため、ワークロードによっては競合して逆に遅くなることもあります。
✅ 向いている
・I/Oやメモリ待ちが多い処理
・Webサーバなど多数の処理を並行実行
⚠️ 向いていない場合がある
・CPUをフルに使う計算処理
・HPC / LINPACKなどの高負荷処理
#Linux #CPU #HyperThreading #SMT
Oracle DatabaseでSQLを実行するとき、SGAとPGAはどう使い分けられるのでしょうか?
主な役割は以下のとおりです。
① Parse → SGA(Shared Pool)
② データアクセス → SGA(Buffer Cache)
③ Sort / Hash Join → PGA(SQL Work Area)
※一般的なDedicated Server構成の場合
SQL Work Areaのメモリが不足すると、TEMP I/Oが発生し、性能に影響する場合があります。
詳細は以下を参照ください👇
eeengineer.com/oracle-memory…
#OracleDatabase #Oracle #インフラエンジニア
What happens inside Linux after an application calls read() or write()?
File I/O doesn't always reach storage immediately.
This diagram explains the Block I/O path:
① Page Cache — Read hits, buffered writes, and writeback
② bio — Describes the I/O operation
③ request — Groups one or more bios
④ blk-mq — Manages queues and dispatch
⑤ Device Driver — Submits commands to storage
I/O completion then propagates back through the driver, request, and bio to the upper layers.
Understanding this flow is essential for Linux I/O performance analysis and troubleshooting.
Full explanation:
eeengineer.com/en/linux-bloc…
#Linux #Kernel #BlockIO #PerformanceEngineering
Does a successful write() mean your data is already on disk?
Not necessarily.
With Linux Buffered I/O, write() typically copies data into the Page Cache and marks the modified pages as dirty.
The actual storage write happens later through kernel Writeback.
This diagram illustrates the entire flow, from write() to storage.
For a deeper explanation 👇
eeengineer.com/en/linux-file…
#Linux #PageCache #Writeback #LinuxKernel #Performance
CPU時間と経過時間の違い、説明できますか?
性能分析では、この2つを区別することが重要です。
■ CPU Time
CPUが実際に処理を実行した時間
= User Time + System Time
■ Elapsed Time
処理開始から終了までの時間
= CPU実行時間 + I/O待ち + その他の待機時間
例えば、処理に10秒かかっても、CPU時間は3秒ということがあります。
また、マルチスレッドでは、CPU時間の合計が経過時間を超える場合もあります。
#Linux #CPU #性能分析 #PerformanceEngineering #インフラエンジニア
LinuxのLoad Averageが高いとき、どこから調査していますか?
Load Averageが高いからといって、必ずしもCPUが不足しているわけではありません。
Load AverageにはCPU実行待ちだけでなく、D stateのタスクも反映されます。
私だったらまず、CPU使用率を確認し、次の観点で切り分けをしています。
・CPU使用率が高い → vmstatのrを確認し、CPU待ちを調査
・CPU使用率が低い → vmstatのr・bや%waを確認し、D state・I/O待ちなどを調査
#Linux #トラブルシューティング #インフラエンジニア
Oracle DatabaseのDirty Bufferは、いつDatafileに書き込まれる?
UPDATEなどで変更されたData Blockは、まずDatabase Buffer Cache上でDirty Bufferになります。
DBWnが書き込む主なタイミングは主に3つ。
① 再利用可能なBufferの不足
② Checkpointの進行
③ 定期的な書き込み処理
COMMIT時に必ずDatafileへ書き込まれるわけではありません。
詳しくは以下のブログを参照ください👇
eeengineer.com/oracle-databa…
#Oracle #Database #インフラエンジニア
OracleとPostgreSQL、内部の処理構造はどう違う?
実は、大きな仕組みは共通しています。
・SQLを処理するプロセス
・共有メモリによるデータキャッシュ
・REDO/WALによる更新ログ
・バックグラウンドでのデータ書き出し
一方、プロセス構造やMVCCの実装には違いがあります。
特に、OracleはUndo、PostgreSQLはVACUUMが性能・運用上の重要なポイントかと。
この辺りの仕組みの違いや性能への影響についても、別途まとめようと思います😆
#Oracle #PostgreSQL #データベース #性能設計
Linuxのプロセスのメモリ使用量、RSSだけで判断していませんか?
RSS・PSS・USSは、共有メモリの扱いが異なります。
・RSS:共有メモリを全量計上
・PSS:共有メモリをプロセス間で按分
・USS:専有メモリのみ計上
RSSを複数プロセスで合計すると、共有メモリが重複計上され、実際の物理メモリ消費より大きくなる場合があります。
一方、PSSは共有分を按分するため、プロセスごとの実質的なメモリ使用量を評価するのに適しています。
メモリ関連トラブルシューティング詳細については、以下で説明しているので合わせてご参照ください👇
eeengineer.com/linux-high-me…
#Linux #メモリ管理 #トラブルシューティング
Linuxでメモリが不足してきたとき、内部で何が起きるか説明できますか?
Linuxのメモリ管理は、
「仮想メモリ」「Page Cache」「Swap」「kswapd」「OOM Killer」など、用語がいろいろ出てきてわかりずらいので整理しています👇
・kswapd / Direct Reclaimでページ回収
・File-backed PageはPage Cacheを回収
・Anonymous Pageは必要に応じてSwapへ退避
・それでもメモリを確保できなければOOM
Linuxメモリ管理について、Kindle本(Kindle Unlimited)でまとめているので、興味ある方がいたら見てもらえると嬉しいです👇
amazon.co.jp/dp/B0HGCXQFHN
#Linux #LinuxKernel #インフラエンジニア
Have you ever deleted a large file with rm, but found that the disk usage didn't decrease?
The reason may be that a process still has the file open.
Even after the filename is removed:
The process can continue to hold the file until the final reference is closed.
More details on Linux filesystem internals are covered in my blog.
eeengineer.com/en/linux-file…
#Linux #LinuxKernel #Filesystem #LinuxTroubleshooting #InfrastructureEngineer
Can you explain how a File Descriptor is connected to an Inode in Linux?
The VFS (Virtual File System) manages files through several interconnected objects:
File Descriptor: An integer used by a process
File: Represents an open file and its state
Path: Combines a Dentry and a Mount
Dentry: Maps a filename to an Inode
Inode: Stores file metadata
Superblock: Stores filesystem-wide information
Understanding these relationships is essential for understanding how Linux handles file operations.
Read more on my blog:
eeengineer.com/en/linux-vfs-…
#Linux #VFS #FileSystem #LinuxKernel
Can you explain how a File Descriptor is connected to an Inode in Linux?
The VFS (Virtual File System) manages files through several interconnected objects:
File Descriptor: An integer used by a process
File: Represents an open file and its state
Path: Combines a Dentry and a Mount
Dentry: Maps a filename to an Inode
Inode: Stores file metadata
Superblock: Stores filesystem-wide information
Understanding these relationships is essential for understanding how Linux handles file operations.
Read more on my blog:
eeengineer.com/en/linux-vfs-…
#Linux #VFS #FileSystem #LinuxKernel
Can you explain what VFS (Virtual File System) actually does in Linux?
VFS provides a common interface for different filesystems, such as ext4, XFS, and NFS.
Its key responsibilities include:
- Path Resolution: Locate files using Dentries and Inodes.
- Permission Checks: Verify access permissions for file operations.
- File Descriptor Management: Create File objects and associate them with File Descriptors.
- Mount Management: Integrate different filesystems into a unified directory tree.
- Operation Dispatch: Route read(), write(), and other operations to the appropriate filesystem implementation.
See how it works in the diagram👇 eeengineer.com/en/linux-vfs-…
#Linux #VFS #FileSystem #LinuxKernel
Oracle Databaseの「Server Process」と「Session」の違い、説明できますか?
・Server Process:SQLを実際に処理するOS上のProcess
・Session:接続ユーザーやTransactionなどの状態を管理する論理的な状態
Dedicated Serverでは通常1対1で対応しますが、Shared Serverでは複数のSessionがServer Process群を共有し、要求ごとに利用可能なProcessが処理します。
両者の違いやLinuxからの確認方法を記載したので、良かったら合わせて見てみてください👇
eeengineer.com/oracle-proces…
🔗 eeengineer.com/oracle-proces…
Oracle Databaseの仕組みを理解するとき、SGAやREDOなどを個別に覚えるだけでは、全体像がなかなか見えてきません。
実際のSQLは、
Application → Listener → Server Process → SQL解析・最適化・実行 → Oracle Instance → Database → Filesystem / ASM → Linux / Multipath → Storage
という複数のレイヤーを通って処理されます。
特にインフラエンジニアとしては、Oracle内部だけでなく、最終的にLinuxのBlock I/Oを経由してStorageへ書き込まれるところまでつなげて理解することが重要だと思っています。
詳細は以下を参照ください👇
eeengineer.com/oracle-databa…
#Oracle #OracleDatabase #Linux #データベース #インフラエンジニア
LinuxでCPU高負荷が発生したとき、どのような順番で調査していますか?
CPU使用率が高いことが分かっても、それだけでは原因を特定できません。
私は以下の流れで調査することが多いです。
① CPU全体の状態を確認
② CPU時間の内訳を確認
③ CPUを消費しているProcessを特定
④ Thread単位まで深掘り
⑤ Application・Kernel・DBなどの原因を調査
皆さんはどんな流れで調査してますか?
LinuxのトラブルシューティングについてKindle本(Kindle Unlimited)を書いてみたので、興味ある方はぜひ読んでみて下さい👇
amazon.co.jp/dp/B0HKF4DR95
#Linux #トラブルシューティング #インフラエンジニア
LinuxのLoad Averageが高いとき、どこから調査していますか?
Load Averageが高いからといって、必ずしもCPUが不足しているわけではありません。
Load AverageにはCPU実行待ちだけでなく、D stateのタスクも反映されます。
私だったらまず、CPU使用率を確認し、次の観点で切り分けをしています。
・CPU使用率が高い → vmstatのrを確認し、CPU待ちを調査
・CPU使用率が低い → vmstatのr・bや%waを確認し、D state・I/O待ちなどを調査
#Linux #トラブルシューティング #インフラエンジニア
LinuxのLoad Averageが高いとき、どこから調査していますか?
Load Averageが高いからといって、必ずしもCPUが不足しているわけではありません。
Load AverageにはCPU実行待ちだけでなく、D stateのタスクも反映されます。
私だったらまず、CPU使用率を確認し、次の観点で切り分けをしています。
・CPU使用率が高い → vmstatのrを確認し、CPU待ちを調査
・CPU使用率が低い → vmstatのr・bや%waを確認し、D state・I/O待ちなどを調査
#Linux #トラブルシューティング #インフラエンジニア
LinuxでLoad Averageが高い。
「CPUが忙しい」と単純に判断していませんか?
実は、Load Average ≠ CPU使用率です。
Linuxでは主に👇がカウントされます。
・R state → CPUで実行中 / 実行待ち
・D state → I/O待ちなどの割り込み不可状態
そのため、CPU使用率が低くてもLoad Averageが高くなることがありますので、注意が必要です。
#Linux #LinuxPerformance #トラブルシューティング #インフラエンジニア #障害対応
Linux Kernelのソースコードに登場する「Macro」と「Function」、違いを理解していますか?
主な違いは、コードの処理方式です。
🔹 Macro(マクロ)
・コンパイル前にコードを展開
・関数のような引数の型指定はない
・引数の複数回評価や副作用に注意
🔹 Function(関数)
・コンパイル後に関数として実行
・引数や戻り値の型チェックあり
・Inline化される場合もある
Linux Kernelでは両方が多用されています。
#Linux #LinuxKernel #C言語 #インフラエンジニア
トラブル発生時、システムの状況を図に整理していますか?
障害対応では、ログやメトリクスの確認だけでなく、全体像を把握することが大切です。
・どの機能に影響があるのか
・どのサーバで問題が起きているのか
・いつから何が変化したのか
・正常な部分はどこか
きれいな図である必要はありません。
図に整理することで、新たな調査観点や検討漏れに気づくことが多々あります。
個人的には、障害対応で欠かせない基本動作の一つだと思っています。
#Linux #トラブルシューティング #インフラエンジニア
障害が起きたとき、どんな順番で対応していますか?
私は障害対応の基本フローを、次の5段階で整理しています。
① 影響範囲の確認
② エビデンス収集
③ 仮説検証・原因特定
④ 暫定対処・復旧確認
⑤ 恒久対処
特に意識したいのは、いきなり原因を決めつけず「事実 → 仮説 → 検証」を繰り返すこと。
詳しくは以下を参照ください👇
eeengineer.com/linux-trouble…
みなさんの現場では、障害対応をどんな流れで進めていますか?
#Linux #障害対応 #トラブルシューティング #インフラエンジニア
NIO(Non-blocking I/O)とは?
Blocking I/Oでは、I/Oの完了までThreadが待機します。
一方、Non-blocking I/Oでは、データがまだなければ待たずに戻り、別の処理を進められます。
Java NIOでは、主に3つの要素を使用します。
・Channel:データの読み書き
・Selector:I/Oの準備状態を監視
・Buffer:データを一時保持
多数の接続を少ないThreadで効率的に管理できるのがポイントです。
#Java #Tomcat #NIO #インフラエンジニア
TomcatへのHTTP接続は、いきなりThreadで処理されるわけではありません。
SYN Queue → Accept Queue → Tomcat Connection → Worker Thread
という複数のレイヤを通ります。
負荷が高まると、
maxThreads → maxConnections → acceptCount
と後段から詰まりが波及し、最終的には接続拒否やTimeoutにつながります。
詳細は以下にまとめてるので、興味あればご覧ください。
eeengineer.com/how-to-tune-t…
#Tomcat #Linux #インフラエンジニア


































