ablog

不器用で落着きのない技術者のメモ

Linux

perf-map-agent で Java のプロセスにアタッチすると AttachNotSupportedException が発生する

事象 perf-map-agent で Java のプロセスにアタッチすると "Unable to open socket file: target process not responding or HotSpot VM not loaded" というエラーが発生する。 Java を実行する。 $ java ... 別セッションで perf-map-agent で実行中の Java…

OpenJDK7u101 を Oracle Linux 6.6 でビルドする

Mercurial をインストールする $ curl -L -O https://www.mercurial-scm.org/release/centos6/RPMS/x86_64/mercurial-3.7.3-1.x86_64.rpm $ sudo rpm -ivh mercurial-3.7.3-1.x86_64.rpm OpenJDK7u60 のソースコードを Mercurial リポジトリから clone する …

「Linus Torvalds、最近のCPUのPage Faultのコストにご不満の様子」が面白かった

本の虫: Linux Torvalds、最近のCPUのPage Faultのコストにご不満の様子 の出典元の Google+ の Linus Tovalds の投稿とそれに対する Brendan Gregg らのコメントが興味深かったのでメモ。 Linus Torvalds...I wrote a small test-program to pinpoint this …

pcstat でファイルのページキャッシュへの乗り具合を調べる

ダウンロード $ cd /usr/local/bin $ curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64 $ chmod 755 pcstat 使ってみる $ dd if=/dev/urandom of=testfile bs=1M count=10 10+0 records in 10+0 records out 10485760 b…

Java Mixed-Mode Flame Graphs で Java の CPU ネックをフルスタックで分析する

Brendan Gregg (NETFLIX の Senior Performance Architect) 作の Java Mixed-Mode Flame Graphs を使うと Java のプロセスが CPU ネックのケースで、Java アプリケーションコード、JVM(HotSpot VM)、Linux Kernel のどのレイヤーのどの関数がボトルネックに…

実行中のマルチスレッドプログラムの特定スレッドのみ停止(SIGSTOP的な)させる方法

@yoheia gdb -p LWP で特定のスレッドだけ止められますよ。— Tsukasa Hamano (@hamano) 2016年3月29日@hamano "gdb -p LWP" でサクッとできました!ありがとうございます。 $ ps -u grid -lLf|grep css$ gdb -p 3449-> LWP:3449 のステータスが t になりまし…

GNOME のウィジットが表示されなくなった

事象 ftrace を使っていたら不安定になったので、再起動したら GNOME のウィジット(時刻表示の近くの電源、ワイアレスネットワークなどが表示されているところ)が表示されなくなった。 対処 ~/.gconf/apps/panel/general を削除する 参考 @IT:GNOMEパネル…

NFS on Linux でロックを解放する方法

NFSクライアントがクラッシュしてNFSサーバにロックが残った場合、Solaris は clear_locks コマンドで解放できるようだが、Linux はないのかな。 ロックやアンロックは /fs/lockd/clntproc.c でやっているぽい。Managing NFS and NIS: Help for Unix System …

NFS設定手順 on Oracle Linux 7.1

Oracle Linux 7.1 でNFSの設定をしたのでメモ。 環境 NFSサーバ: Oracle Linux 7.1 NFSクライアント: Oracle Linux 5.3 構成 NFS Server:/home/oracle/nfs/local -> NFS Server:/home/oracle/nfs/remote -> NFS Client:/home/oracle/nfs/remote 設定手順 NFS…

Oracle Linux 6 on OracleVM では gettimeofday が vDSO でない

gettimeofday(2) は VDSO によりユーザー空間で実行される - ablog と違って Oracle Linux 6.7 on OracleVM 3.2 (Xenベース) だと strace で gettimeofday が出るという話を聞いたので、 strace のログを見てみます。Non Blocking I/O の システムコール(io_…

OOM Killer について

RHEL4 は vm.oom-kill=0 で無効化できる RHEL5(kernel 2.6.11) 以降はプロセス単位のみ制御可能(echo -17 > /proc/[pid]/oom_adj) RHEL7(kernel 2.6.36) 以降は echo -1000 > /proc/[pid]/oom_score_adj proc(5) - Linux manual page

DBサーバの空きメモリサイズの見方(Oracle Database on Linux)

JPOUG Advent Calendar 2015 の5日目のエントリーです。 昨日は [twitter:@discus_hamburg] さんの Mac De Oracle: OTHER_XMLの中身 でした。 Linux で Oracle Database を使っている場合の”実質的な”空きメモリサイズの算出方法を紹介します。 絵は 「シン…

2種類の非同期I/O

非同期I/Oの「非同期」の意味が2つあって、紛らわしくなった背景を書いてみた*1。 Unix では (non)synchronizedと(a)synchronous という用語が使われているが、英語(自然言語)だと紛らわしい*2 (a)synchronous はI/O処理を待つかどうか、(non)synchronized …

Linux のページ回収まわりのカーネルパラメータ

Linux(kernel 2.6.32-303 以降)のDBサーバでメモリ16GB、スワップ領域16GBの場合、ざっくりこんな感じが良いかなという妄想メモ。 vm.swapiness=1 vm.overcommit_memory=2 vm.overcommit_ratio=80 vm.min_free_kbytes=524288 vm.extra_free_kbytes=1048576(k…

RHEL6.4(kernel 2.6.32-303)以降の vm.swappiness=0 と OOM Killer の関係

RHEL6.4(kernel 2.6.32-303)以降、vm.swappiness=0 にすると OOM Killer が発動しやすくなるので、1 にしましょうという話を見かけるのでメモ。詳しくは後日調べる予定。 Deploying Oracle Database 12c on Red Hat Enterprise Linux 6 Best Practices Warni…

disk_asynch_io=false ならASMに対して同期I/O(pwrite)になる

As you know ASM is doing non (operating system) buffered I/O (also known as ‘DIO’ or Direct I/O) regardless of the oracle database filesystemio_options parameter.But what’s about : Asynchronous/Synchronous I/O ?If you have a look to MOS no…

Oracle Database on Linux で SGA(共有メモリ) のスワップアウトを防ぐ方法

Oracle Database の初期化パラメータ LOCK_SGA = true を設定する SGA(共有メモリ) に HugePages を使う Linux のカーネルパラメータ vm.swappiness=0 にする(Linux Kernel 3.5 未満は 0 にしてもページアウトされることがある)

"ipcs -um"で共有メモリがスワップアウトされているか確認する

ipcs -um の "pages swapped" がスワップアウト(ページアウト)されたページ数。 これに 4KB を掛けるとページアウトされたサイズを算出できる。 $ ipcs -um ------ Shared Memory Status -------- segments allocated 39 pages allocated 3464 ★仮想メモリに…

NFSでI/Oシステムコール発行後に応答がない場合、プロセスを kill できるか

NFSのマウントオプションで soft と hard がある。プロセスがI/Oシステムコールを発行してユーザーモードからカーネルモードにコンテキストスイッチした後、応答がないと、soft の場合はリトライを繰返した後にI/Oエラーになるが、hard の場合は応答があるま…

vm.min_free_kbytes からの wmark_{min|low|high} 算出式

Linux のページ回収の閾値である wmark_min、wmark_low、wmark_high の算出式を調べたメモ。 算出式 正確には NUMA ノードの ZONE 毎に計算されるが、合計の概算は下記の式で計算できる。 min_free_kbytes = sqrt(物理メモリサイズ(KB) * 16) wmark_min = mi…

ext4 の性能についての資料

ただのメモ Scaling the Linux Kernel(Revisited): Using ext4 as a Case Study by Theodore Ts'o (Google)

Red Hat Enterprise Linux のリリースとカーネルのバージョンの対応を調べるページ

Red Hat Enterprise Linux のリリース日と収録カーネルの一覧 - Red Hat Customer Portal 関連 Oracle Linux のディストリビューションとカーネルバージョンを調べる方法 - ablog

NFS のマウントオプションの hard と soft について調べたメモ

NFS のマウントオプションの hard、soft について調べたメモ(Linux限定)。 まとめ hard の動作 NFS サーバが応答するまで書込を永遠に繰返す。 アプリケーションはI/Oを発行した後、完了待ちでスリープし続ける。 hard と intr を併用するとシグナルを送って…

"Reducing Memory Access Latency" が素晴らしすぎる

Reducing Memory Access Latency by Satoru Moriya (Hitachi LTC) が素晴らしすぎるのでメモ。 まとめ vm.swappiness = 0 により、解放可能なページキャッシュがあるうちはプロセスのメモリ(anon page)をスワップアウトしないようにできる*1。 swappines=0 …

NFSの排他制御について

NFSの排他制御についてメモ(Linux限定)Managing NFS and NIS: Help for Unix System Administrators作者: Mike Eisler,Ricardo Labiaga,Hal Stern出版社/メーカー: O'Reilly Media発売日: 2001/08/15メディア: ペーパーバックこの商品を含むブログを見る 11.…

Linux のページテーブルのサイズの見方と見積式

Linux Kernel 2.6 (x86-64) でのページテーブルのサイズの確認方法と見積式を調べてみた。 あっているか自信のないところもある&まだ書きかけ。 ページテーブルのサイズの見方 OS全体のページテーブルのサイズ $ cat /proc/meminfo MemTotal: 16158544 kB M…

pgrep で子プロセスの PID を調べる

子プロセスの PID を取得したい場合、人間が見るには pstree が便利だけど、 $ pstree -alp $$ zsh,13840 ├─pstree,14216 -alp 13840 ├─zsh,13940 │ └─sleep,14213 10 └─zsh,13992 └─sleep,14215 10 シェルスクリプトで子プロセスの PID を取得して何か自動…

プロセスのランキュー待ち時間とI/O待ち時間を調べる

cat file|awk では実行時間 システムコールで取得します。catのプロセスと awk のプロセスが並列実行されている期間があるため、実行時間 (中略) 大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog と書きましたが、プロセスの…

funcgraph で Linux カーネル内のボトルネックをミクロに追跡する

perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog で Linux カーネル内のボトルネックをマクロに分析する方法を紹介しましたが*1、 strace でI/Oシステムコールのレスポンスを調べると遅く*2、 iostat の await でカーネルのブロッ…

perf + Flame Graphs で Linux カーネル内のボトルネックを特定する

Linuxでddで1GBのファイルを作成し perf でプロファイリングし、Flame Graph (炎のグラフ?)にして可視化したものです。 Flame Graphs は perf(Linux)、SystemTap(Linux)、DTrace(Solaris、Oracle Linux(UEK)、Mac OS X、FreeBSD)、XPerf.exe(Windows) など…