procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st
人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 topコマンドのように、実行中のプロセスとプロセスのreadとwriteのI/OをBpsでリアルタイムで表示するツールpiotop.plをPerlの復習がてら作ってみました。さらに、それをOpenVZやVirtuozzo+Plesk+Apacheの環境で、どのコンテナのどのドメインのどのCGIやPHPがどの程度I/Oを使っているのか、まで調べることができるようにしました。 はじめに vmstatやiostat等が個人的にはあまり見やすくないのと、Webサーバ上でトラフィックだけでなく、実際にHDDとのI/Oがどの程度なのかをプロセス単位で調べたい、というのがもともとの動機です。トラフィックが少なくても、サーバ内部で猛烈にI/Oするようなプログ
サーバーのリソースを見るにはグラフ化は重要ですが、推移ではなくリアルタイムな状況、例えば秒単位のスパイキーな負荷を見るには、サーバー上でvmstatやiostatなどの*statファミリーを叩く必要があります。 さて、vmstatはメモリの状況やブロック数単位のI/O状況は見られますが、バイト単位のI/O状況やネットワークの送信、受信バイト数を見ることはできません。 # vmstat 1 procs -----------memory---------- ---swap--- -----io----- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 3 1 0 4724956 355452 726532 0 0 54 484 3 3 1 0 99 0 0 2 0 0 47
明らかにディスクのI/Oが原因でマシン全体の処理が重くなっているときに、 何がそんなにI/Oを行っているのか気になるときがある。(まぁ、大体updatedbなんだけど・・・) iostatやsar -dなどではプロセスまではわからないので、 何か無いかと検索したらiotopと言うものがあるらしい。 さっそくemergeすると。 # emerge -av iotop ... * CONFIG_TASK_IO_ACCOUNTING: is not set when it should be. * CONFIG_TASK_DELAY_ACCT: is not set when it should be. * Please check to make sure these options are set correctly. * Failure to do so may cause unexpec
アプリケーションエンジニアの人には「なんか重い」という状況に遭遇したらインフラの人にタスクを投げる、という人もいるかも知れません。けど、その重さのどこに原因があるのか。CPUか、ネットワークか、IOかくらいの診断はできた方がアプリ開発においても有益です。 「せっかくつくったシステムがなんか重い」 そんな時にアプリケーションエンジニアとしてできることを書きます。 本職のインフラの人にはぬるい内容だと思います。何を隠そう僕自身がアプリ寄りの人間なので、突っ込んだ話はできないのです。あしからずご了承ください。 なんかサーバが重いなー まずはロードアベレージを調べる サーバが重いと思ったら、まず真っ先にすべきことは対象ホストにSSH接続してロードアベレージを調べることでしょう。ロードアベレージとは 実行されずに待たされているプロセスの数 のことで、多すぎるとやばいと認識しておきましょう。ロードアベ
iowait の時間って、I/O要求を出しているプロセスは Disk Sleep しているという理解でいいんだろうか。 ちょっとわからなくなってきた。 linux-2.6/kernel/sched.c /* * Account for idle time. * @cputime: the cpu time spent in idle wait */ void account_idle_time(cputime_t cputime) { struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat; cputime64_t cputime64 = cputime_to_cputime64(cputime); struct rq *rq = this_rq(); if (atomic_read(&rq->nr_iowait) > 0) cpu
Are you in need of monitoring a Linux server for performance? These commands provide useful information about a system's activities.Are you in need of monitoring a Linux server for performance? These built-in command and add-on tools provide techniques which can be used to get useful information about a system’s activities. These tools will help find the possible causes of a performance problem. T
CPUネックの検出 vmstatコマンドもしくはsar -uコマンドの%user + %system(ユーザ+システムのCPU使用率)に注目します。 この数値が平均的に80%を超えているようであれば、CPUネックである可能性があります。 CPUネックの可能性があった場合、 sar -qコマンドもしくはvmstatコマンドで実行可能なプロセスの待ち行列を確認する。 値が定常的に搭載CPU数を超えていれば確実にCPUネックです。 [待ち行列の値を確認] sar -q :runq-sz vmstat :r列 CPUネックだと判断できたら、どのプロセスがCPUを使っているかTOPコマンドで確認します。 P CPU利用率順にソート M メモリ使用率順にソート ◆CPUの搭載数を調べる LinuxマシンでCPUの搭載数を調べるには、以下のコマンドを実行する。 $ cat /p
トム「やあ、マイケルどうしたんだ。やつれた顔して」 マイケル「やあ、トム…どうしたもこうしたもないよ。全くバグがとれないのさ」 トム「ふーん?どこでどんなふうになっているんだい?」 マイケル「それがわからないから困っているのさ…!」 トム「ん?」 マイケル「このソフトなんだがね、起動中にどこかで無限ループしているようなんだよ。だけどどこかわからなくって」 トム「gdbの中で走らせて、killしてやったら?」 マイケル「そうするとほら」 % gdb --args ./src/hengband -- -n1 GNU gdb (Gentoo 7.2 p1) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses
出力例 $ iostat -x 30 avg-cpu: %user %nice %system %iowait %steal %idle 0.87 0.01 2.53 0.49 0.00 96.11 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 sda1 0.00 0.00 0.00 0.00 0.00 0.00 15.53 0.00 12.81 11.47 0.00 sda2 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 avg-cpu: %user %nice %syst
Kernel 2.6.37で導入された表題の機能が、RHEL6.1にバックポートされています。非常に分かりやすい機能ですので、実験結果を書き残しておきます。(RHEL6.0には入っていませんのでご注意を。) パラメータの説明 ・blkio.throttle.read_bps_device ・blkio.throttle.write_bps_device 特定のデバイスに対するアクセス速度の上限をByte/Sec単位で指定。0を指定すると制限を解除。 指定方法は"Major:Minor 設定値"(例"8:0 1048576") ・blkio.throttle.read_iops_device ・blkio.throttle.write_iops_device 特定のデバイスに対するアクセス速度の上限をIO/Sec単位で指定。0を指定すると制限を解除。 指定方法は"Major:Minor 設定
1. 高性能・安定運用のための Linux/DB システム構築 / 運用技術 松信 嘉範 (MATSUNOBU Yoshinori) サン・マイクロシステムズ株式会社 プリンシパル MySQL コンサルタント 2. プロフィール 2006 年 9 月から MySQL->Sun(-> オラクル ) で MySQL コンサルタントとして勤務 主な著書 Linux-DB システム構築 / 運用入門 現場で使える MySQL Java データアクセス実践講座 Twitter: matsunobu Blog: http://opendatabaselife.blogspot.com * 今回の資料は公開します * MySQL 用語があちこちに出ますが、 経験の無い方にも分かるように配慮していくつもりです 3. 安定稼働と高性能を支える要素 アプリケーション層に関する技術 テーブル設計、インデックス設
実験エントリです。 動機 OracleのStatspack/AWRで取れるファイル単位のDisk I/O情報を、MySQLでも採取したい。これは次に示すようなデータです。 File IO Stats DB/Inst: ORA112/ORA112 Snaps: 6-7 ->Mx Rd Bkt: Max bucket time for single block read ->ordered by Tablespace, File Tablespace Filename ------------------------ ---------------------------------------------------- Av Mx Av Av Rd Rd Av Av Buffer BufWt Reads Reads/s (ms) Bkt Blks/Rd Writes Writes/s Wai
ここのところ、お仕事で管理しているシステムで、夜中に負荷が急上昇する事象が発生しており、夜な夜な対応に追われていました。 (このブログ書いている今も、負荷がじわじわ上昇中なんですが・・・) で、いろいろと調査した結果、ようやく糸口がわかってきました。 結論から言うと、ローカルポートなどのネットワーク資源を食いつぶしていたようです。 以下、調べていってわかったことなどのメモです。 トラブルの事象 運用しているのは Apache2.2 + mod_perl2 なwebサーバで、リスティング広告システムの配信系です。 リスティング広告の配信のシステムって一般的にロジックが複雑でいやーな感じなんですが、このシステムもご他聞に漏れずかなりのひねくれ者で、しかもトラヒックは結構多めです。システム全体で、日に1000万〜2000万クエリくらいかな。幸か不幸か、このご時勢においてもトラヒック的には成長し続
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く