原因調査用Linuxコマンド | 外道父の匠

目次

プロセス系

  • ps
  • pstree
  • top
  • lsof
  • vmstat
  • pidstat
  • mpstat
  • dstat
  • /proc/$PID/
  • Disk I/O系

  • df
  • iotop
  • iostat
  • Network系

  • ping
  • ifconfig
  • ip
  • route
  • traceroute
  • mtr
  • netstat
  • tcpdump
  • iptables
  • arp
  • telnet
  • DNS系

  • host
  • dig
  • OS系

  • sysctl
  • mount
  • fdisk
  • ulimit
  • /proc/
  • reboot
  • ガチンコデバッグ系

  • strace
  • sar
  • 性能計測

  • fio
  • snmpwalk
  • 補助ツール

  • watch
  • 解決力に関わる要素

    プロセス系

    ps [in procps]

    プロセスの表示。

    # とりあえず診る# 実際に使用しているメモリ容量であるRSS列が大事ps axwu # プロセス名の確認ps -C procname

    pstree [in psmisc]

    プロセスの親子関係をツリー表示。

    # -u でユーザ名をつけて表示pstree -u # -p はまとまり解除されるけどPIDつくpstree -u -p

    top [in procps]

    心の友。医師の触診と同じ。

    # とりあえず診るtop -d1 # 全出力を2秒毎10回。ログ用top -bH -d2 -n10 # 出力中に f で出力内容の変更

    lsof [in lsof]

    プロセスが開いているファイルのリストとか。

    # プロセスIDで表示lsof -p 12345 # ユーザで表示lsof -u yarn # プロセス名で表示lsof -c java # ファイルやパーティションで指定lsof /bin/bashlsof /var # LISTENしてるプロセスを表示lsof -i:80

    vmstat [in procps]

    topの簡易表示的な。最近はContextSwitchとか診る時以外あんま使わない。

    # とりあえず診るvmstat 1 # ディスクステータスvmstat -d 1 10

    pidstat [in sysstat]

    プロセス毎に色々表示。

    # CPUpidstat 2 10 # メモリpidstat -r 2 10 # DiskI/Opidstat -d 2 10 # -l でコマンド名を全表示

    mpstat [in sysstat]

    CPU情報表示。

    # 合計mpstat 2 10 # スレッド毎mpstat -P ALL 2 10

    dstat [in dstat]

    色々カラフルに表示。

  • dstatの万能感がハンパない – (ひ)メモ
  • # 全部表示dstat -Tclmdrn

    /proc/$PID/

    プロセス毎の色んな情報。

    # ulimitの設定cat /proc/12345/limits

    Disk I/O系

    df [in coreutils]

    パーティションとかディスク容量確認。

    # とりあえず診るdf -Th

    iotop [in iotop]

    プロセス毎にDiskI/Oを表示。

    # 2秒毎iotop -d2 # 表示中に←→でソート項目変更

    iostat [in sysstat]

    デバイス毎にDiskI/Oを表示。

    # 標準iostat 2 10 # 色々表示iostat -x 2 10

    Network系

    ping [in procps]

    ご挨拶。死活確認とかルーティング確認とか。

    # -n で逆引きしないとか -i で間隔とかping google.co.jp -n -i 2

    ifconfig [in net-tools]

    ネットワークインターフェースの表示とか設定。

    # eth, peth, vlan あたりの確認が主/sbin/ifconfig -a

    ip [in iproute]

    割り当てアドレスの表示。

    # 全部表示ip addr show # VIPなど2つ目以降を表示ip addr show dev eth0 scope global secondary

    route [in net-tools]

    経路の表示とか設定。

    # 表示。主にDefaultG/Wの確認だが、FORWARDとかVPNの時に活躍# ネットワーク死んでる時は -n で逆引きしない/sbin/route -n # DefaultG/W 追加と削除# 通常の経路は default じゃなく -net 10.1.0.0/24 とか/sbin/route add default gw 10.0.0.254/sbin/route del default gw 10.0.0.254

    traceroute [in traceroute]

    通信経路の確認。ここ数年、使った覚えない・・・

    # 逆引きしない場合traceroute -n google.co.jp

    mtr [in mtr-tiny]

    通信経路の継続表示。どこで、どのくらいの品質なのかまでわかる。
    mtrパッケージだとX11用途と不要なので mtr-tiny で十分。

  • MTR
  • Diagnosing Network Issues with MTR
  • # 逆引きしない場合mtr -n google.co.jp

    netstat [in net-tools]

    ネットワーク接続情報を表示。
    TCP/UDP のポート見たり、FIN_WAIT とか CLOSE_WAITの量を見たり。

    # 全部見るnetstat -an

    tcpdump [in tcpdump]

    パケットがちゃんと行ったり来たりしてるか確認。FORWARD関連で大活躍

    # -i に eth0 とか指定したり any で全部# -n で逆引きしない# あとは適当に and と or で色々指定tcpdump -i any -n port 80 and icmp and not vrrp

    iptables [in iptables]

    iptablesでファイヤーウォール作ってる場合はパケット数とかDROP見る。

    # iptablesの設定見るiptables -L -v -niptables -L -v -n -t nat # あとはDROPログ見たり新しいの通したり

    arp [in net-tools]

    Pingを返さないサーバの確認や、IPアドレス重複事件の解決に。

    # arpテーブルでIPアドレスとMACアドレスを確認するarp # 他の手段として、どこかにarpwatchサービスを起動しておくと# ネットワーク上の新規サーバやMACアドレス変更を常に把握できる

    telnet [in telnet]

    サーバと密なお話。HTTPだけならnetcatやwgetもアリ。

    # 手入力でヘッダ書いてHTTPリクエストを送るtelnet google.co.jp 80 # メールサーバ構築とか調査では直接お話しすると早く分かり合えることもtelnet mailserver 25

    DNS系

    host [in bind9-host]

    正引き。nslookupよりこっち使う。

    # 普通に名前解決host google.co.jp # DNSサーバの指定もできる。しなければ /etc/resolv.confhost google.co.jp 8.8.8.8

    dig [in dnsutils]

    高機能な名前解決など。

    # 基本はAレコードdig google.co.jp # 全レコード取得したり、DNSサーバを指定したり。メールだとTXT大事dig google.co.jp any @8.8.8.8 # ルートサーバから引く。新ドメインやレコード変更反映の確認時にdig google.co.jp any +trace # 逆引き。メールを受信してもらう際のフィルタリング回避などでdig -x 8.8.8.8

    OS系

    sysctl [in procps]

    OSのチューニング的な。

    # 現在の設定を表示/sbin/sysctl -a # 再設定vim /etc/sysctl.confsysctl -p

    mount [in mount]

    マウントオプション見たり。

    # 現在の表示mount -l # オプション反映# 稼働中にやる場合は怖いけどビビったら負けvim /etc/fstabmount -o remount /var

    fdisk [in util-linux]

    デバイスやパーティション情報の表示が主。
    2TB以上のGPTだと gdisk を使いたいが >= squeeze-backports

    # 全部みる。fdisk -l

    ulimit [shell builtin]

    ユーザごとの色んな制限。

  • 過去記事:ulimitが効かない不安を無くす設定
  • # 現在のユーザの設定表示ulimit -a # 設定するvim /etc/security/limits.confls /etc/security/limits.d/*.conf

    /proc/

    # CPU情報less /proc/cpuinfo # メモリ情報less /proc/meminfo

    reboot [in sysvinit]

    OS再起動したら直る、という結論が負け犬かどうかは貴方次第。

    # 最終奥義発動reboot

    ガチンコデバッグ系

    strace [in strace]

    処理の詳細なトレース。

  • Linuxデバッグコマンド strace の基本的な使い方
  • # -tt で時分秒にマイクロ秒までつけて -o でファイルに結果を保存strace -iTvtt -o /tmp/strace.log date

    sar [in sysstat]

    色んなシステム情報の取得。

  • 逆引きUNIXコマンド/システム情報を取得する・sarコマンド
  • sarコマンドのオプションと使用法
  • sarコマンドの見方
  • # バイナリで残る結果を、閲覧するsar -o /tmp/sar.bin 2 30sar -f /tmp/sar.bin -A | less

    性能計測

    fio [in fio]

    I/O性能計測。

    mkdir /tmp/fio-test/ # ワンライナーfio --name=test --directory=/tmp/fio-test/ --direct=1 --rw=randwrite     --bs=16k --size=1G --group_reporting --numjobs=1 # 設定ファイル形式vim /tmp/fio.txt-------------[test]directory=/tmp/fio-test/direct=1rw=randwritebs=16ksize=1Ggroup_reporting=1numjobs=1-------------fio /tmp/fio.txt

    snmpwalk [in snmp]

    snmpdから直接値を取得。

    # OIDの確認などのため全表示snmpwalk -On -c public -v2c localhost .1 | less # いちいちグラフ生成を待ちたくない時のワンライナー例# user CPUname="userCPU"; second=30; community=public oid=".1.3.6.1.4.1.2021.11.50.0"; start=`snmpwalk -c $community -v2c localhost $oid | sed -e "s/.*Counter32: //g"`; sleep $second; end=`snmpwalk -c $community -v2c localhost $oid | sed -e "s/.*Counter32: //g"`; result=`expr $end - $start`; output=`expr $result / $second`; echo "$name : $output"

    補助ツール

    watch [in procps]

    定期的なプログラムの実行。

    # 結果保存やtopのようなディスプレイ表示ができないコマンドを実行し続けるwatch ps wu -u mysql # 間隔秒を指定したり、実行コマンド全体を文字列にしてリダイレクト保存したりwatch -n1 "ps wu -u mysql >> /tmp/watch.log"

    解決力に関わる要素

    根気

    諦めないその精神と、それを持続するためのブドウ糖。

    経験

    何を知り、何を調べ、どう詰め寄るかの効率的なスケジューリング。

    閃き

    たまには当てずっぽうで検証して原因を特定したり、仮定から逆詰めしたり。

    相談

    人に相談しようと内容を整理して説明している途中で解決できちゃうテディベア現象。

    睡眠

    ギブアップ一歩手前で30分くらい寝て、起きてみるといきなり解決できること多し。

    これらのコマンドを駆使して、発生タイミングや条件を探して異常値と原因を特定していくだけの簡単なお仕事です。

    問題の整理から原因の特定まではかったるい作業だけど、
    解決に至った時の達成感はエンジニアの至福!!

    広告

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中