Uprobes の概要と使い方

Uprobes とは 以前に Kprobes を調べたので(Kprobes の概要と使い方 - SIerだけど技術やりたいブログ)、そのユーザ空間版である Uprobes について調べた。まあ大体一緒。 Uprobes はユーザ空間のアプリケーションに処理を差し込むための仕組み。自身が開発し…

Kprobes の概要と使い方

Kprobes とは Kprobes は実行中のカーネルに処理を差し込むための仕組み。おもにカーネルのデバッグやパフォーマンス解析に利用される。カーネル内のデータをいじれるため、テストのために障害注入するという使い方もできる。Kprobes を直接利用することは少…

Linux の挙動を変更する 4 つの方法

Linux カーネルの挙動を変更する次の 4 つの方法について整理する。 名称 概要 設定変更を反映するタイミング カーネルコンフィグ コンパイル時の設定 再ビルド ブートパラメータ カーネル起動時の設定 再起動 モジュールパラメータ モジュールロード時の設…

Linux カーネル ソースコードのマクロを展開する

やりたいこと カーネルのソースコードを読んでいると、まあまあな頻度でマクロに遭遇する。 core_param(pause_on_oops, pause_on_oops, int, 0644); 簡単なマクロならそのまま読めるが、マクロの定義中にマクロが使われてたりする。 #define core_param(name…

Linux プロセス管理を理解したい

プロセスについて学習したことをまとめました。間違いあればコメントください。 検証環境 プロセスとは プロセス空間 プログラムはどのように動作するか タイムシェアリング どうやって実行するプロセスを切り替えるか? いつプロセスを切り替えるか? どの…

【Kubernetes 完全に理解した】認定Kubernetes管理者(CKA)に合格しました

認定Kubernetes管理者 (CKA) に ほとんど満点 で合格しました。 スコアは 98% でした。これはつまり、 Kubernetes 完全に理解した(入門した) という事ですね? この記事は 認定Kubernetes管理者(CKA) の概要と勉強方法を共有します。 認定Kubernetes管理者(C…

PostgreSQL Isolation について

DB

トランザクションのACID特性のうち、Isolation(隔離性)について整理する。 検証環境 Isolationとは? Isolation Level Snapshot Isolationとは? Write Skew Read Only Skew PostgreSQLにおける実現手段 ANSIとの対応 実装の詳細 追加/更新/削除の挙動 Isolati…

iptables で [unsupported revision] が出る

問題 kube-proxy が設定したルールを iptables コマンドで表示すると、[unsupported revision] になる。 ]# iptables -nL -t nat Chain KUBE-SEP-AAJZQ5YHVGUCPI77 (1 references) target prot opt source destination KUBE-MARK-MASQ all -- 10.200.192.87 …

Kubernetes ログを読んで理解する kube-proxy の仕組み

kube-proxy は各ノードで動作するネットワークプロキシ。Service の仕組みの一部(ClusterIP や NodePort など)を実現し、クラスタ内部または外部から Pod にアクセスできるように制御する。 参考 Kubernetes Components 参考 Kubernetes Service Service は …

Kubernetes コンテナ名を y にすると実行できなくて困った(YAML の Boolean の話)

k8s

環境 Kubernetes 1.15 ]# kubectl version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:54Z", GoVersion:"go1.…

linux /proc/kallsyms をコードから理解する

検証環境 CentOS 8.1 を利用する。 ]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ]# uname -a Linux localhost.localdomain 4.18.0-147.3.1.el8_1.x86_64 #1 SMP Fri Jan 3 23:55:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux /proc/ka…

k8s Persistent Volumes の ReadWriteOnce は単一 Pod からのアクセスに絞るための設定じゃない

k8s

kubernates 1.17。 $ kubectl version Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:30:10Z", GoVersion:"go1.13.5…

k8s ConfigMap で設定を Pod から分離できる( nginx の設定を ConfigMap で管理する)

k8s

ConfigMap は Pod の外から設定データ(環境変数やファイル)を注入するための仕組み。設定を Pod と分離して管理できることに価値がある。 ConfigMap はキーとバリューで構成されていて、複数の方法で作成できる。また、複数の方法で Pod に設定データを注入…

kubernetes kubectl で Pod 内の指定したコンテナにアクセスする方法

k8s

Pod は k8s のデプロイ可能な最小単位。複数のコンテナから成り立つ。kubectl exec -it [pod名] [command]だと、デフォルトのコンテナに接続されてしまう。 $ kubectl exec -it samplepod /bin/sh Defaulting container name to busybox1. Use 'kubectl desc…

Linux メモリ管理 徹底入門(カーネル編)

メモリ管理は、Linux カーネルのコアな機能です。この機能を理解することで、サーバの統計情報の意味がわかるようになったり、トラブル解析ができるようになります。 この記事では、Linux カーネルのメモリ管理について勉強したことを基礎からまとめます。 …

Linux debuginfo って何?

debuginfo は、デバッグ情報が入っているリポジトリ。 検証環境 デバッグ情報とは何か 補足 デバッグ情報の付与のしかた デバッグ情報の効果を確かめる デバッグ情報の中身を見てみる デバッグ情報の問題点 debuginfo gdb での使い方 gdb はどのようにデバッ…

Linux コマンドの多言語対応 ~ tar の「空のアーカイブ作成はご容赦願います」の謎に迫る~

多くの Linux コマンドは、環境変数によってメッセージを切り替えます。 参考 【Linux入門】ローカライゼーションのためのロケール情報設定方法 ]# LANG=C tar -c tar: Cowardly refusing to create an empty archive Try 'tar --help' or 'tar --usage' for…

Linux yum を基礎から理解する

普段なんとなく yum を使っていませんか?私はそうです。 ということで、 yum を基礎からおさらいしました。 検証環境 yum の基礎 パッケージ パッケージの中身の確認 どのように依存関係を解決するか? リポジトリにアクセスする マイナーバージョン リポジ…

Linux システムコール 徹底入門

Linux システムコールについて調べたことをまとめる。システムコールの仕組みを理解すると、 OS とアプリケーションがどのように連携して動いているのかを理解できるようになります。 システムコールは CPU に依存する処理が多いため、 x86_64 に絞ります。 …

Java 経験者がスムーズに Python を使い始めるために

これまでは主に Java を読み書きしていたのですが、業務が変わってからはインフラ自動化やデータ分析のためにPython スクリプトを書く機会が増えてきました。最近は世の中的にも、様々な言語やライブラリを適材適所で採用し、組み合わせてシステムを構成する…

Linux procfs 徹底入門

これは Linux Advent Calendar 2019の 15 日目の記事です。procfs について勉強したことをまとめます。 検証環境 procfs とは 代表的なファイル システム全体 /proc/cpuinfo /proc/meminfo /proc/cmdline /proc/filesystems /proc/modules /proc/mounts /pro…

Java コードリーディングのコツ

この記事は 品川 Advent Calendar 2019 の5日目です。 OB 枠での参加です。いったいどこの某弊社なんでしょうか… 。 本記事は Eclipse で Java ライブラリのコードリーディングを行うときのコツをまとめます。あくまでも「自分はこんな考え方やテクニックを…

Linux メモリ管理 徹底入門(プロセス編)

Linux カーネルのメモリ管理方法について、勉強したことをまとめる。プロセス編。 カーネル編はこちら。 www.kimullaa.com メモリ管理の特徴 連続したメモリ領域 プロセスごとに独立したアドレス空間 実行例 メモリの効率的な割り当て デマンドページング ス…

Linux ファイルシステム 徹底入門

検証環境 ファイルシステムとは何か? ファイルアクセスの詳細 ストレージデバイスの特徴 open inode dentry file dentry キャッシュと inode キャッシュの効果を測定する read ページキャッシュとバッファキャッシュ ページキャッシュ バッファキャッシュ di…

PostgreSQL WALログの仕組みとタイミングを理解したい

DB

普段はアプリケーションレイヤの仕事をしているため、「データベースはデータを入れておくただの箱」という発想でした。が、さすがにこれはまずいだろう、と思いたち、勉強中です。 とくにデータベースが専門領域というわけではないので、間違いがあれば教え…

Linux rpmパッケージのコードリーディングをしたい

デバッグ情報を付与するだけなら debuginfo-install を使えばいいが、今回は、ソースコードを閲覧または変更できるようにする。 参考 CentOS 7: デバッグシンボルでパッケージをデバッグする 検証バージョン ]$ cat /etc/redhat-release CentOS Linux releas…

Python for文とイテレータとジェネレータ

Python3 のチュートリアルを流してみたので、その際に面白いと感じたところのメモです。 参考 Python チュートリアル 動作環境 $ python --version Python 3.7.3 はじめに python の for 文は、イテレータから値を取り出して繰り返すだけ。 JavaやC言語のよ…

C言語がコンパイル~実行されるまで

記事の内容 以下のソースコードがコンパイル~実行されるまでに、何が行われるのかを理解する。 細かいオプションや処理の詳細は追わない。 #include <stdio.h> #define MESSAGE "hello world\n" int main(int argc, char *argv[]) { printf(MESSAGE); return 0; } 記</stdio.h>…

Java オブジェクトの比較に関するひっかけ問題

検証環境 ]$ uname -a Linux localhost.localdomain 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux ]$ java -version openjdk version "11.0.1" 2018-10-16 LTS OpenJDK Runtime Environment 18.9 (build …

Spring なぜMyBatisの実行したSQLがSpringの管理しているトランザクションで実行できるのか?

なぜMyBatisの実行したSQLがSpringの管理しているトランザクションで実行できるのか、を調べる。そのために、 mybatis-spring の実装を追っていく。 対象バージョン java version "11.0.1" 2018-10-16 LTS Spring Boot 2.1.2.RELEASE mybatis-spring-boot-st…