Carpe Diem

備忘録

Unix・Linux

VSZ, RSS(anonymous, file)の理解を深める

背景 KubernetesでPodがOOM Killされた際には以下のようなログが発生します。 Memory cgroup out of memory: Kill process 9130 (XXXX) score 1592 or sacrifice child Killed process 9130 (XXXX) total-vm:423008kB, anon-rss:122484kB, file-rss:33792kB,…

cgroupsでリソース制限

概要 cgroups (control groups)は、プロセスグループのリソース(CPU、メモリ、ディスクI/O、ネットワークなど)を制限、考慮、分離するLinuxカーネル機能です。 これを使ってプロセスのリソース制限を行ってみます。 環境 Ubuntu 18.04.3 cgroupsの構成 cgr…

PAM (Pluggable Authentication Modules)

概要 LinuxにはPAMという認証システムとアプリケーションを分離するための仕組みが用意されています。 ref: https://docs.oracle.com/cd/E19253-01/819-0396/ch3pam-01/index.html プラガブルという名前の通り、モジュールによって認証方法を簡単に切り替え…

inodeから見たmvやcpの動き

背景 実行中のファイルに対してcpで上書きする場合だとText file busyで置き換えられず、mvだと何も聞かれず置き換えられる理由を深掘ってみました。 データ構造 mvやcpの動きを確認する前に必要な前提知識を説明します。 プロセスとinodeとの関係 プロセス…

リダイレクトの仕組みを深掘りする

背景 $ コマンド > outfile 2>&1 と $ コマンド 2>&1 > outfile は結果が異なります。 前者は標準出力、標準エラーともにoutfileに出力されるのに対し、後者は標準出力はoutfileに、標準エラーはターミナルに出力されます。 この違いを理解するためにUnixの…

I/O Multiplexing(I/O多重化)

概要 christina04.hatenablog.com で一度まとめましたが、まだ理解があやふやなところがありました。 その後 Working With TCP Sockets を読んでようやくストンと理解できたのでまとめます。 経緯 たくさんのリクエストを受けるにはどうしたらいいか、で マ…

pipeエラーのハンドリング

概要 write: broken pipeといったクライアント側の強制的なコネクション切断でのエラーハンドリングをする際の知見まとめ。 環境 golang/go 1.13.3 事前知識 知っておくと良い知識を先に説明します。 そもそもpipeとは pipeはプロセス間通信をするための単方…

UnionFS で Docker のレイヤ構造を理解する

概要 DockerではAUFSという技術が使われています。 こちらはUnionFS(ディレクトリを重ね合わせることができる)の一つで、親のファイルシステムをすべてReadOnlyにして、その上に書き込み可能なレイヤを重ねて1つのファイルシステムのように扱います。 Docker…