IPVS-NATでリアルサーバーから応答がない事象の解決方法

○ 事象
IPVS(LVS)(NAT/マスカレード構成)環境にて、端末からサービスIPにアクセスするとサーバーからの応答がない。
tcpdumpで調べると、応答パケットがリアルサーバーからアクセス元端末に戻っておらず、さらに調べると、IPVSを構築しているサーバーで応答パケット(戻りの通信)が破棄(遮断)されている。

□ アクセス端末
↓|
■×IPVS・ファイアーウォール
↓|↑
□ リアルサーバー

○原因
ファイアーウォールがIPVSを経由した応答パケットを認識していない!
ファイアウォールのルールが

iptables -P FORWARD DROP

iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
(eth0・・・WAN(入り口) eth1・・・LAN(リアルサーバー側)

であったりすると、通常のルーティングならファイアーウォールがアクセス先にHTTPアクセスがあったこを記憶して転送し、の応答が戻ってきたときにアクセス端末側に返す。
しかし転送にIPVSを噛ますとアクセスがあったという記憶をしていないらしい。
※正確に言うと、記憶している場所が違うので情報を取り出せない。
端末→IPVS→リアルサーバー・・・INPUTチェイン
端末←IPVS←リアルサーバー・・・FORWARDチェイン
なので、応答パケット(戻りのパケット)のダイナミックフィルタリングで許可がでず、PVSを構築しているサーバー上でパケットが破棄されてしまう・・・
詳細はこのURLのイントロダクション参照(英文)
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html
※要訳
IPVS-NATはnetfilter(iptables)の仕様上、経路追跡に問題がある。
カーネルにパッチを適用することによって問題が解決するらしい。
またはDSR構成にする。
と言われても、素のカーネルをコンパイルして(しかもパッチ適用)使用するのはすがに怖い!
かといてDSR構成にもできない(並行して、SSL証明書などの問題で
PoundやApacheをつかってURLベースのバランシングをしているなど・・・)
ではどうするか?
○解決方法
ダイナミックフィルタリングができないなら、静的フィルタリングで無理やり許可する!
IPVSサーバー上で、リアルサーバーからの転送通信を送信元のポートを特定して許可る。
たとえばSMTPなら

iptables -A FORWARD -i eth1 -o eth0 -p tcp –sport 25 -j ACCEPT
(eth0・・・WAN(入り口) eth1・・・LAN(リアルサーバー側)

これでめでたく開通。
セキュリティー上ちょっと怖いが・・・

qmail-scanner UTF-8 対応

qmail-scanner をUTF-8に対応させる方法
元々はEUC-JPにしか対応していないので、無理矢理./configureを実行すると以下のようなメッセージが表示させる

# ./configure (省略) –lang ja_JP.UTF-8 (省略) –add-dscr-hdrs yes –install
***** NOTE ******
Qmail-Scanner doesn’t have language translations for ja_JP.UTF-8,
– so defaulting to english…

○対処方法
UTF-8用のファイルをEUC-JPから変換して作成する。
以下のコマンドを実行

# cd qmail-scanner-2.02
# mkdir ./locale/ja_JP.UTF-8
# for file in $( ls ./locale/ja_JP.EUC/* )
# do
# iconv -f euc-jp -t UTF-8 ${file} | tee ./locale/ja_JP.UTF-8/${file##*/}
# done

./configure実行時に以下のオプションを指定

./configure (省略) –lang ja_JP.UTF-8 (省略)

フレッツ光プレミアムにてDNSから名前解決できなくなる現象の回避方法

フレッツ光プレミアムにてDNSから名前解決ができなくなる現象の回避方法。

現象

フレッツ光プレミアムにて、インターネットのサイトを参照していると、時々DNSから名前解決ができなくなる。
(~が見つかりませんなどのエラーが発生する。URLからIPアドレスが導き出せない(引くことができない)。)
時にはYahoo! 時にはgoogle。全サイト(ドメイン)が解決できないのではなくて、一部のドメインだけ一時的に名前解決できない。

原因

フレッツ光プレミアム指定の(というか、DHCPで自動配信される)DNSは時々応答を返さない(プライマリ・セカンダリともに)

解決方法

自宅サーバーにDNS(bind)を構築して、クライアントPCはこのDNSに問い合わせするようにする。
自宅サーバーのDNSはプロバイダ指定のDNSを参照するようにする。
named.confに

forwarders {
プロバイダ指定のプライマリDNSIPアドレス;
プロバイダ指定のセカンダリDNSIPアドレス;
};

を定義して、DNSへの問い合わせをプロバイダ指定のDNSへ転送するようにする。
クライアントPC(自分が普段使用しているPC)の
問い合わせDNSの設定は
プライマリDNSを 192,168.24.1 (光プレミアムのCTU(ルータ)のIPアドレス)
セカンダリDNSを 自宅サーバーのIPアドレス
にする。
こうすれば、上記の問題が解決し、CTUの設定も触れてかつ高速かつ安定したDNSの応答が期待できる。

Linuxで、ISOイメージからUSBブートLinux CD を作成

Linuxで、ISOイメージからUSBブートLinux CD を作成
CD-ROM(DVD)ドライブがないマシンで、レスキューモードで起動したいときなどに有効。(そのためだけに外付けCD-ROMドライブを買うのがもったいないなど)
USBメモリは、フラッシュメモリーやSDカード、コンパクトフラッシュ(CF)など。
1.USBメモリに領域作成

# fdisk /dev/sda
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります
コマンド (m でヘルプ): p
Disk /dev/sda: 260 MB, 260046848 bytes
8 heads, 62 sectors/track, 1024 cylinders
Units = シリンダ数 of 496 * 512 = 253952 bytes
デバイス Boot Start End Blocks Id System
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-1024, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1024, default 1024):
Using default value 1024
コマンド (m でヘルプ): a
領域番号 (1-4): 1
コマンド (m でヘルプ): p
Disk /dev/sda: 260 MB, 260046848 bytes
8 heads, 62 sectors/track, 1024 cylinders
Units = シリンダ数 of 496 * 512 = 253952 bytes
デバイス Boot Start End Blocks Id System
コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

2.USBメモリにext3ファイルシステム作成

# mke2fs -j /dev/sda1

3.Netwide Assembler インストール
後のsyslinuxのコンパイル時に必要

# yum install nasm.i386

4.syslinux インストール
syslinuxのサイトURL
http://syslinux.zytor.com
http://freshmeat.net/projects/syslinux/

# wget http://freshmeat.net/redir/syslinux/10177/url_tgz/syslinux-3.52.tar.gz
# tar zxvf syslinux-3.52.tar.gz
# cd syslinux-3.52
# make

5.extlinuxでUSBメモリにブートローダ(第2段階目)書き込み
extlinuxはsyslinuxのext2/3ファイルシステム用のサブセット

# cd extlinux
# mount /dev/sda1 /mnt/flash
# mkdir -p /mnt/flash/isolinux #・・・・isoイメージのディレクトリ構成にあわせる
# ./extlinux -i /mnt/flash/isolinux
/mnt/flash/isolinux is device /dev/sda1

6.USBメモリのマスターブートレコード(MBR)にブートローダ(第1段階目)書き込み
これを書き込まないと起動できない!

# cat ../mbr/mbr.bin > /dev/sda

7.isoイメージの内容のコピー

# mkdir /mnt/isoimg
# mount -o loop INSERT-1.3.9b_en.iso /mnt/isoimg
# cp -pR /mnt/isoimg/* /mnt/flash
# sync

8.USBメモリに書き込んだブートローダーの設定ファイルの名前変更

# mv /mnt/flash/isolinux/isolinux.cfg /mnt/flash/isolinux/extlinux.conf

9. ブート検証
USBメモリをさしたままマシンを再起動する
BIOS設定画面を起動し、ブートデバイスを「USB-HDD」に。「USB-HDD」が選択できない場合、BIOSがUSBメモリブートに対応していない・・・

(linux) LVM2 スナップショット+バックアップ

LVM2 スナップショットのスナップショット機能を使った安全なファイルシステムバックアップの方法
スナップショット先のデータは変更されないので安全にバックアップが取得できる。
(ファイルシステムよりシステムよりのLVMの層でオリジナルデータと一緒に変更管理を行っているため、小容量で安全にできる)
○ 検証環境作成
# mke2fs -j /dev/testvg/testlv1
# mount /dev/testvg/testlv1 /mnt/test
# echo "aaaaaa" > /mnt/test/aaaaaa
# echo "bbbbbb" > /mnt/test/bbbbbb

○ lvスナップショット
※mysqlなどのデータベースならここでロックをかける。「FLUSH TABLES WITH READ LOCK;」
# lvcreate -s -L 32M -n snaptestlv /dev/testvg/testlv1
Logical volume "snaptestlv" created

※mysqlなどのデータベースならここでロックを解除。「UNLOCK TABLES;」
○ スナップショット取得検証
オリジナルデータの変更
# echo "cccccc" > /mnt/test/cccccc
# echo "bbbaaa" > /mnt/test/bbbbbb

○ スナップショットのデータの確認
# mkdir /mnt/snaptest
# mount /dev/testvg/snaptestlv /mnt/snaptest
# ls /mnt/snaptest
aaaaa bbbbbb lost+found
# cat /mnt/snaptest/bbbbbb
bbbbbb
# cat /proc/mounts
/dev/testvg/testlv1 /mnt/test ext3 rw 0 0
/dev/testvg/snaptestlv /mnt/snaptest ext3 rw 0 0
# umount /mnt/snaptest
# lvm lvdisplay testvg
--- Logical volume ---
LV Name /dev/testvg/snaptestlv
VG Name testvg
LV UUID yoJjdE-LVJE-LHN1-zrBu-u8bB-ra3R-ijQn0Z
LV Write Access read/write
LV snapshot status active destination for /dev/testvg/testlv1
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
COW-table size 32.00 MB
COW-table LE 8
Allocated to snapshot 0.29% ←スナップショット先lvの使用率 オリジナルデータを変更するほど増加
Snapshot chunk size 8.00 KB
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:5

○ スナップショット先のファイルシステムバックアップ
# dump 0f /tmp/testlv.dmp /dev/testvg/snaptestlv
# lvm lvremove /dev/testvg/snaptestlv

※スナップショット先のlvを消さないと、いつまでもlvの古いデータコピーを続ける
○ バックアップデータの検証
# rm /mnt/test/*
# cd /mnt/test
# restore rf /tmp/testlv.dmp
# ls
aaaaaa bbbbbb lost+found restoresymtable
# cat /mnt/test/bbbbbb
bbbbbb

(linux)LVM2の操作方法

いまさらながらLVM2の操作方法
○検証環境作成

# dd if=/dev/zero of=/var/tmp/mounttest1 count=128 bs=1024k
# ls -l /var/tmp/mounttest1
-rw-r–r– 1 root root 134217728 7月 12 09:29 /var/tmp/mounttest1

空いてるループバックデバイスの確認

# losetup /dev/loop0
loop: デバイス /dev/loop0 の情報を取得できません: そのようなデバイスやアドレスはありません

ループバックデバイスとループバックファイルを設定

# losetup /dev/loop0 /var/tmp/mounttest1
# losetup /dev/loop0
/dev/loop0: [fd00]:146028 (/var/tmp/mounttest1)

○ lvm用パーティション作成
fdisk でパーティションを作成。システムタイプをlinux LVMにする

# fdisk /dev/loop0
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-16, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-16, default 16):
Using default value 16

こんな感じで作成
/dev/loop0p1 128M

システムタイプの番号を確認
コマンド (m でヘルプ):l
8e Linux LVM
システムタイプを変更
コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました
コマンド (m でヘルプ): p
Disk /dev/loop0: 134 MB, 134217728 bytes
255 heads, 63 sectors/track, 16 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/loop0p1 1 16 128488+ 8e Linux LVM

書き込み

コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
警告: 領域テーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。

ということで、ループバックデバイスにはパーティションが設定できない模様。
そのまま/dev/loop0を使うことに。
本来ならここで、再起動

# shutdown -r now

○ 物理ボリューム(PV)作成

# lvm pvcreate /dev/loop0
Physical volume “/dev/loop0” successfully created# lvm pvdisplay /dev/loop0
— NEW Physical volume —
PV Name /dev/loop0
VG Name
PV Size 127.81 MB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID WqwiNW-FB83-Cjup-iMQt-YDgp-MSZm-z7py2I

○ ボリュームグループ(VG)作成

# lvm vgcreate testvg /dev/loop0 (-s サイズ でエクステントサイズ指定 エクステント数は最大65535個)
Volume group “testvg” successfully created
# lvm vgdisplay testvg
— Volume group —
VG Name testvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 124.00 MB
PE Size 4.00 MB
Total PE 31
Alloc PE / Size 0 / 0
Free PE / Size 31 / 124.00 MB
VG UUID txlZBT-9tGO-OHcH-eev4-1j8n-gdEa-0f8VVN

○ 論理ボリューム(LV)の作成

# lvm lvcreate -L 32M -n testlv1 testvg # 32MBの大きさのLVを作成
Logical volume “testlv1” created
# lvm lvcreate -l 8 -n testlv2 testvg # 4MBのエクステント8個分の大きさ(32MB)のLVを作成
Logical volume “testlv2” created
# lvm lvdisplay testvg
— Logical volume —
LV Name /dev/testvg/testlv1
VG Name testvg
LV UUID t67uqN-Pfua-RHd9-wDT4-S4wq-HbL9-faBLRU
LV Write Access read/write
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2— Logical volume —
LV Name /dev/testvg/testlv2
VG Name testvg
LV UUID jwFWPR-Jb0k-K0BC-lwBf-rD4L-Wuw8-R252GB
LV Write Access read/write
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:3

○ ファイルシステム作成

# mke2fs -j /dev/testvg/testlv1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
8192 inodes, 32768 blocks
1638 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33554432
4 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

○ マウント

# mkdir /mnt/test
# mount /dev/testvg/testlv1 /mnt/test
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
31729 4509 25582 15% /mnt/test
# ls -l /dev/testvg/testlv1
lrwxrwxrwx 1 root root 26 7月 12 10:33 /dev/testvg/testlv1 -> /dev/mapper/testvg-testlv1

○ 論理ボリュームの削除

# lvm lvremove /dev/testvg/testlv2
Do you really want to remove active logical volume “testlv2”? [y/n]: y
Logical volume “testlv2” successfully removed

○ 論理ボリュームの拡張
書式
# lvm lvextend [ -l +エクステント数 | -L +バイト数 ] 論理ボリュームのパス
サイズの前に+をつけないと絶対的なサイズ指定になる(現在のサイズからの足し算にならない)

# lvm lvextend -l +1 /dev/testvg/testlv1
Extending logical volume testlv1 to 36.00 MB
Logical volume testlv1 successfully resized
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
31729 4509 25582 15% /mnt/test

※lvのサイズが大きくなるだけで、ファイルシステムのサイズは大きくならない
○ ファイルシステムの拡張
書式
# resize2fs -p 論理ボリュームのパス [新しい全体のサイズ]

# resize2fs -p /dev/testvg/testlv1 #サイズを指定しない場合論理ボリュームのサイズが自動指定される
resize2fs 1.35 (28-Feb-2004)
/dev/testvg/testlv1 is mounted; can’t resize a mounted filesystem!

※アンマウントしろ!と怒られる
※最近のLinuxでは、ファイルシステムの拡張はマウントしたまま resize2fsコマンドが実行できる。なので以降は不要。その影響で後に出てくるext2onlineコマンドもなくなっている。

# umount /mnt/test
# resize2fs -p /dev/testvg/testlv1
resize2fs 1.35 (28-Feb-2004)
Please run ‘e2fsck -f /dev/testvg/testlv1’ first.

※ファイルシステムのチェックをしてねとお願いされる

# e2fsck -f /dev/testvg/testlv1
e2fsck 1.35 (28-Feb-2004)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/testvg/testlv1: 11/8192 files (9.1% non-contiguous), 5548/32768 blocks
# resize2fs -p /dev/testvg/testlv1
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/testvg/testlv1 to 36864 (1k) blocks.
Begin pass 1 (max = 1)
Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/testvg/testlv1 is now 36864 blocks long.
# mount /dev/testvg/testlv1 /mnt/test
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
35567 4509 29584 14% /mnt/test

※ファイルシステムのサイズが大きくなっていることを確認
※ext3の場合はext2onlineコマンドでマウントしたまま(オンライン)でできる(最近のLinuxではこのコマンドはなくなっています。理由はresize2fsコマンドがマウントしたまま実行可能だからです。)

○ ボリュームグループの削除

# lvm vgremove testvg

(linux) 実行ファイル実行時に参照する共有ライブラリを見つけれないときの対処

実行ファイルを実行すると
「cannot open shared object file: ~ – xxxxx.so (LoadError)」

「relocation error: symbol not found」
と、共有ライブラリやらシンボルが見つからないと怒られるときの対処方法。この事象は、
rpmパッケージを無理矢理インストールしたときや、
どこかの製品をインストールしたとき
に発生する可能性大。
とりあえず、lddコマンドで実行するコマンドが使用する共有ライブラリ(ダイナミックリンクライブラリ)の依存関係を調べる。
# ldd /usr/local/hoge/bin/hoge
hoge1.so => /usr/local/hoge/lib/hoge1.so (0x0000008000030000)
hoge2.so => /usr/local/hoge/lib/hoge2.so (0x0000008000148000)

ここで、
・右側に表示されたライブラリのパスに該当のファイルが存在している場合
 →バージョン違いの共有ライブラリがキャッシュされている可能性(この時たぶんsymbolエラーになっているはず)
 または共有ライブラリがキャッシュされていない(この時はたぶん見つからないエラー)
 →下記の対処方法を参照
・左側に表示されたファイル名が右側のパスと異なるディレクトリにある
 →共有ライブラリのあるディレクトリがライブラリキャッシュの対象となっていない
  →下記の対処方法を参照
・左側に表示されたファイル名のファイルがどこにもない
 →そもそも必要な共有ライブラリがインストールされていない
 (rpm -i –force で無理矢理入れたな。もしや製品の前提条件読んでないな。)
  →先に前提条件のパッケージを入れろ!
・対処方法
 ライブラリ検索リストを確認。
 該当の共有ライブラリが存在するディレクトリが登録されていなければ登録する。
 # vi /etc/ld.so.conf
/usr/local/hoge/lib

 共有ライブラリを更新(リンク再作成・キャッシュ)
 # ldconfig
ちなみに、現在キャッシュおよびリンクされている共有ライブラリの一覧は
# ldconfig -l
で確認できる。

空きメモリの確保の仕方(メモリーチューニング)(kernel2.6)

linux kernel2.6 での メモリーチューニングの方法。大容量物理メモリの場合、ほとんどがページキャッシュ・ファイルキャッシュ。
必要な処置
?A.早めにダーティーページを掃除させる
?B.できるだけスワップさせない
?C.最低空き容量を大きくする。
? →ファイルキャッシュがたまらない
?  →1つのプロセス分の空きメモリを空けていれば、プロセス起動時にスワップしない。
?   →メモリが必要になった瞬間の、スワップによるスローダウンが防げる
A.早めにダーティーページを掃除させる
?pdflushがダーティーページの掃除を行う
? vm.dirty_ratio > ダーティーページの割合 > vm.dirty_background_ratio
? のときpdflushがバックグラウンドで掃除
? ダーティーページの割合 > vm.dirty_ratio
? のときdflushがフォワグラウンドで掃除
 なので、vm.dirty_ratio vm.dirty_background_ratioの値を小さくすれば
 こまめに掃除をし、メモリが空く可能性がある。
 (メモリが必要になったときに、一括で長時間スローダウンすることが
   防げる可能性がある)

 しかし、これだけではダーティーページだけでページキャッシュは開放されない
B.最低空き容量を大きくする。
?空きメモリ容量が vm.min_free_kbytes を下回ったとき
 ページキャッシュは開放される。

  vm.min_free_kbytesの値を大きくすれば、
  ページキャッシュの総量を減らせる。

 極端な話、アプリで最大300MBメモリを使用するなら、
 この値を307200(=300MB*1024)にしておけばスワップしない(バッファキャッシュがあるぞとかスワップアウトのアルゴリズムが・・・とか細かいことは抜きして)



C.できるだけスワップさせない
?vm.swappiness を減らせばスワップしにくくなる。
  (何かのパーセンテージらしい・・・)



[追記]
/proc/sys/vm/drop_caches に値を放り込めば、
キャッシュが即時開放されるらしい(Kernel2.6.16 以降(CentOS5/RHEL5以降))
echo "3" >  /proc/sys/vm/drop_caches
1・・・ページキャッシュのみを解放
2・・・ダーティページとinodeキャッシュを解放
3・・・ ページキャッシュとダーティページとinode
を解放
実行前にsyncを実行したほうがいいらしい。

2はいいとして、1と3をしたら直後にパフォーマンス悪くなりそう・・・
(コマンドを実行するごとにメッセージファイルを読みにいったりしてるの知ってますか?)

kernel2.4の頃みたいに直接キャッシュサイズを指定できたらここまで悩まんでもいいのに・・・


	

ディスク使用率

コマンド

iostat -d -x 3

ビジーの基準

  • %util が 100%に近ければビジー
  • svctm 50(ミリ秒)以上
  • 平均I/O要求サイズ(avgrq-szフィールド) 平均待機時間(awaitフィールド)が高いとI/O待ちの可能性

平均サービス時間(svctmフィールド)

iostat 秒数 測定回数
avg-cpu: %user %nice %sys %idle

出力項目の説明

  • AIX版 iostat

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

  • %user—アプリケーション使用率
  • %nice—
  • %sys—カーネルのCPU使用率
  • %idle—CPUの未使用率
  • tps—
  • Blk_read/s—ディスクの読み込み量(ブロック/秒)
  • Blk_wrtn/s—ディスクの書き込み量 Blk_read—ディスクの読み込み総量(ブロック)
  • Blk_wrtn—ディスクの書き込み総量
  • linux版 iostat -xの項目説明

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s avgrq-sz await svctm%util

  • rrqm/s—秒毎にマージされた読み込み要求数
  • wrqm/s—秒毎にマージされた書き込み要求数
  • r/s—読み込み要求数/秒 w/s—書き込み要求数
  • rsec/s—読み込みセクタ数/秒
  • wsec/s—書き込みセクタ数/秒
  • rkB/s—読み込み量(KB)/秒
  • wkB/s—書き込み量(KB)/秒
  • avgrq-sz—I/O要求の平均サイズ(セクタ)
  • avgqu-sz—I/O要求の平均待ち数
  • await—I/O要求の平均待ち時間(ミリ秒)
  • svctm—I/O要求の平均処理時間(ミリ秒)
  • %util—I/O要求におけるCPU消費量(%)

VNCを使わずLinuxデスクトップのGUIアプリを使用する方法

linux/unixのディスプレイがないマシンで、GUIインストールしかできない場合に有効
クライアント(Windows)にはcygwin(X Windowあり)が必要
1.クライアント側のセットアップ・クライアント(Windows) cygwin bash console起動

#X Window起動
$ startx
# 外部マシンからのXの接続許可
$ xhost <LinuxマシンのIPアドレス> #無条件に許可するためにはアドレス部分を+にする

2.Linuxマシン側のセットアップ・Linuxマシン

$ export DISPLAY=<WindowsクライアントのIPアドレス>:0

3.確認・Linuxマシン(exportした端末で)

$ xload

Windowsクライアント側に画面が出たら成功