月: 2014年9月

【openVZ】のnumprocをあげる

openVZのnumprocをあげる。。

どうもnumprocあたりの制限に引っかかった模様なので引き上げる。

とりあえず平時のサーバの状態をメモ(コンテナ側)

[root@***** ~]# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
175: kmemsize 4759207 5394432 14372700 14790164 0
lockedpages 0 0 2048 2048 0
privvmpages 45846 47872 786432 786432 0
shmpages 769 1745 21504 21504 0
dummy 0 0 0 0 0
numproc 39 47 240 240 0
physpages 16177 17402 0 2147483647 0
vmguarpages 0 0 524288 524288 0
oomguarpages 5910 5912 26112 2147483647 0
numtcpsock 10 10 360 360 0
numflock 19 22 188 206 0
numpty 1 2 100 100 0
numsiginfo 0 27 256 256 0
tcpsndbuf 101160 101160 1720320 2703360 0
tcprcvbuf 163840 163840 1720320 2703360 0
othersockbuf 8992 46608 1126080 2097152 0
dgramrcvbuf 0 1224 262144 262144 0
numothersock 93 101 120 120 0
dcachesize 1137018 1151802 3409920 3624960 0
numfile 656 755 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 128 128 0

【OpenVZ】numproc

コンテナ内のプロセス数の最大値を設定するパラメータ。

上記サイトを参考に理論上の制限を確認。

[root@***** ~]# cat /proc/sys/kernel/threads-max
62341

大丈夫そうなのでとりあえず1000に設定してみる。

ホスト側で以下を実行

[root@localhost ~]# vzctl set 175 --numproc 1000:1000 --save
UB limits were set successfully
CT configuration saved to /etc/vz/conf/175.conf

コンテナ側で確認。

[root@***** ~]# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
175: kmemsize 4763303 5394432 14372700 14790164 0
lockedpages 0 0 2048 2048 0
privvmpages 45846 47872 786432 786432 0
shmpages 769 1745 21504 21504 0
dummy 0 0 0 0 0
numproc 39 47 1000 1000 0
physpages 16180 17402 0 2147483647 0
vmguarpages 0 0 524288 524288 0
oomguarpages 5913 5913 26112 2147483647 0
numtcpsock 10 10 360 360 0
numflock 19 22 188 206 0
numpty 1 2 100 100 0
numsiginfo 0 27 256 256 0
tcpsndbuf 101160 101160 1720320 2703360 0
tcprcvbuf 163840 163840 1720320 2703360 0
othersockbuf 8992 46608 1126080 2097152 0
dgramrcvbuf 0 1224 262144 262144 0
numothersock 93 101 120 120 0
dcachesize 1137018 1151802 3409920 3624960 0
numfile 656 755 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 128 128 0

あがってるので良いはず。

【openVZ】ホスト側コンテナの場所を変更する

openVZのホスト側コンテナの場所を変更する

■デフォルトコンテナの位置を変える
サーバの容量の都合で場所変えたくなったりする。

#vim /etc/vz/vz.conf

## Defaults for containers
VE_ROOT=/vz/root/$VEID
VE_PRIVATE=/vz/private/$VEID

↓以下に変更した

## Defaults for containers
VE_ROOT=/home/vz/root/$VEID
VE_PRIVATE=/home/vz/private/$VEID

これで次回以降作成するコンテナは/home側に作られる。

■各コンテナの設定ファイルの場所

/etc/vz/conf

※実際はシンボリックだった

# pwd
/etc/vz

# ll
合計 20
lrwxrwxrwx. 1 root root   23  3月 15 20:01 2012 conf -> ../sysconfig/vz-scripts
drwxr-xr-x. 3 root root 4096  3月 15 20:01 2012 dists
-rw-r--r--. 1 root root  739  1月 15 04:52 2012 download.conf
drwxr-xr-x. 2 root root 4096  1月 15 04:52 2012 names
-rw-r--r--. 1 root root  345  1月 15 04:52 2012 osrelease.conf
-rw-r--r--  1 root root 1335  3月 26 13:36 2012 vz.conf

■久しぶりにコンテナ立てたのでその時の作業ログ

□コンテナ作成
[root@localhost ~]# vzctl create 175 --ostemplate centos-6-x86 --config basic
Creating container private area (centos-6-x86)
Performing postcreate actions
CT configuration saved to /etc/vz/conf/175.conf
Container private area was created

□起動設定
[root@localhost ~]# vzctl set 175 --onboot yes --save
CT configuration saved to /etc/vz/conf/175.conf

□host名設定
[root@localhost ~]# vzctl set 175 --hostname openvz.example.com --save
CT configuration saved to /etc/vz/conf/175.conf

□IPアドレス設定
[root@localhost ~]# vzctl set 175 --ipadd 192.168.1.175 --save
CT configuration saved to /etc/vz/conf/175.conf

□ソケット設定
[root@localhost ~]# vzctl set 175 --numothersock 120 --save
CT configuration saved to /etc/vz/conf/175.conf

□ネームサーバ設定
[root@localhost ~]# vzctl set 175 --nameserver 192.168.1.1 --save
CT configuration saved to /etc/vz/conf/175.conf

□コンテナ起動
[root@localhost ~]# vzctl start 175
Starting container ...
Container is mounted
Adding IP address(es): 192.168.1.175
Setting CPU units: 1000
Container start in progress...

□rootパスワード設定
[root@localhost ~]# vzctl exec 175 passwd
New password: ルートパスワード設定
Retype new password: ルートパスワード設定
Changing password for user root.
passwd: all authentication tokens updated successfully.

□言語設定
[root@localhost ~]# vzctl exec 175 'echo LANG="ja_JP.UTF-8" > /etc/sysconfig/i18n'

□時間設定
[root@localhost ~]# vzctl exec 175 'mv /etc/localtime /etc/localtime.org'
[root@localhost ~]# vzctl exec 175 'ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime'

□HDD容量設定
[root@localhost ~]# vzctl set 175 --diskspace 100G:105G --save

□メモリ設定
[root@localhost ~]# vzctl set 175 --vmguarpages $((256 * 2048)) --save
UB limits were set successfully
CT configuration saved to /etc/vz/conf/175.conf
[root@localhost ~]# vzctl set 175 --privvmpages $((256 * 3072)) --save
UB limits were set successfully
CT configuration saved to /etc/vz/conf/175.conf

□容量増やしたのにinode増やしてなくてエラーでので増量
[root@localhost ~]# vzctl set 175 --diskinodes $(( 200000*3 )):$(( 220000*3 )) --save

□コンテナの稼動状況
[root@localhost ~]# vzlist -a
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
      ・・・
       175         38 running   192.168.1.175   openvz.example.com
	・・・

ネットワークが切れている時がある

ネットワークの動作が不安定になる(Windows 7)

windows7のPCでスクリーンロックして離席して
戻ってきたときにネットワークが切れていることが
たまにあった。

調べてみると以下のページを発見。

ネットワークの動作が不安定になる(Windows 7)

設定を変更した際にネットワークが一旦切断されるので
作業中のファイルなどは閉じておいたほうが安全です。

自分のPCでは「省電力イーサネット」という表記でした。

今のところ快調。

php expectのインストール

ちょっと自動化ツールの兼ね合いでローカル環境にphp expectを入れる。

# pecl install channel://pecl.php.net/expect-0.3.1

今回はgccとtcl-develが無くてインストールできなかったので

yum install gcc tcl-devel

その後もう一回やったら入った。

64bit版はrpmもあるようなのでrpmで入れる場合は以下のサイトとかから取得してインストールしてもいいかもしれない。
opennac-php-pecl-expect

vagrantで立てたvmにswapを設定する。

vagrantのゲストサーバ側で割り当てていた物理メモリを超えるような処理をしたときにvmが落ちてしまった。
ホスト側のログにはこんな感じで出ていた。

# less /var/log/messages

Sep 10 16:39:08 r210devel kernel: Out of memory: Kill process 19223 (VBoxHeadless) score 231 or sacrifice child
Sep 10 16:39:08 r210devel kernel: Killed process 19223, UID 502, (VBoxHeadless) total-vm:3144740kB, anon-rss:15636kB, file-rss:1765760kB
Sep 10 16:39:08 r210devel kernel: EMT-1: page allocation failure. order:0, mode:0x304d2
Sep 10 16:39:08 r210devel kernel: Pid: 19232, comm: EMT-1 Not tainted 2.6.32-431.3.1.el6.x86_64 #1
vagrant status

上記で確認するとステータスは「aborted」になってしまっていた。

物理メモリの上限をあげたりしたらいいのかもしれないけど、
swapがなさそうだったのでswapを追加してみる。

以下方法。

■現状を確認する

# swapon -s
Filename                                Type            Size    Used    Priority

■スワップ用ファイルの作成。今回は1024MBで作成。

# dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 13.2406 s, 81.1 MB/s

■スワップ領域として初期化する。

# mkswap /swapfile
mkswap: /swapfile: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=c46d6690-8fe3-4555-b9f3-50d690dee94c

■スワップ領域を有効にする。

# swapon /swapfile

■追加されたか確認する。

# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048568 0       -1

■再起動したときにもswapが使えるようにfstabに登録しておく。

# sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

※そもそも物理メモリ量をゲストvmが超えた場合に落ちないようにしたいけどその方法はわかっていない・・・。
このページのような現象だけどもどうしたものか・・・。
Out of Memory: Killed process process…

メモリをそんなに使わないようにするのがいいんだろうな。。

■参考URL
Vagrant+VirtualBox+CentOS環境でMySQL5.6が起動しない場合の対処法

linux スワップ(swap)領域の作成

ルートファイルシステムで「EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group **: ** blocks in bitmap, ** in gd」ってエラー出た。

ルートファイルシステムで「EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group **: ** blocks in bitmap, ** in gd」ってエラー出た。

vagrantで作ったCentOS6.5の開発環境でサーバ内の
フォルダがいたるところでおかしくなる現象が発生した。

作成したツールが悪さしたのかとか思っていたけど、
どうもrootでしか触れない箇所も一部書き換えられている
ようだったので、そうじゃないと判断。

「dmesg」、「/var/log/message」をみたら以下のようなエラーを吐いていた。

Sep  8 08:30:35 vagrant-centos65 kernel: sda: sda1 sda2 sda3
Sep  8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: [sda] Attached SCSI disk
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts:
Sep  8 08:30:35 vagrant-centos65 kernel: Refined TSC clocksource calibration: 3096.416 MHz.
Sep  8 08:30:35 vagrant-centos65 kernel: Switching to clocksource tsc
Sep  8 08:30:35 vagrant-centos65 kernel: dracut: Mounted root filesystem /dev/sda1
Sep  8 08:30:35 vagrant-centos65 kernel: SELinux:  Disabled at runtime.
Sep  8 08:30:35 vagrant-centos65 kernel: type=1404 audit(1410132625.773:2): selinux=0 auid=4294967295 ses=4294967295
Sep  8 08:30:35 vagrant-centos65 kernel: dracut:
Sep  8 08:30:35 vagrant-centos65 kernel: dracut: Switching root
Sep  8 08:30:35 vagrant-centos65 kernel: udev: starting version 147
Sep  8 08:30:35 vagrant-centos65 kernel: vboxguest 0000:00:04.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
Sep  8 08:30:35 vagrant-centos65 kernel: input: Unspecified device as /devices/pci0000:00/0000:00:04.0/input/input5
Sep  8 08:30:35 vagrant-centos65 kernel: vboxguest: major 0, IRQ 20, I/O port d020, MMIO at 00000000f0000000 (size 0x400000)
Sep  8 08:30:35 vagrant-centos65 kernel: piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: Copyright (c) 1999-2006 Intel Corporation.
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: (PCI:33MHz:32-bit) 08:00:27:a5:8f:41
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: Intel(R) PRO/1000 Network Connection
Sep  8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: Attached scsi generic sg0 type 0
Sep  8 08:30:35 vagrant-centos65 kernel: parport_pc 00:04: reported by Plug and Play ACPI
Sep  8 08:30:35 vagrant-centos65 kernel: ppdev: user-space parallel port driver
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): warning: mounting fs with errors, running e2fsck is recommended
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd
Sep  8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): warning: maximal mount count reached, running e2fsck is recommended
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts:
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 20: 5 blocks in bitmap, 29 in gd
Sep  8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep  8 08:30:35 vagrant-centos65 kernel: NET: Registered protocol family 10
Sep  8 08:30:35 vagrant-centos65 kernel: lo: Disabled Privacy Extensions
Sep  8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Sep  8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Sep  8 08:30:35 vagrant-centos65 rpc.statd[955]: Version 1.2.3 starting
Sep  8 08:30:35 vagrant-centos65 sm-notify[956]: Version 1.2.3 starting
Sep  8 08:30:39 vagrant-centos65 smbd[1342]: [2014/09/08 08:30:39.851680,  0] printing/print_cups.c:151(cups_connect)
Sep  8 08:30:39 vagrant-centos65 smbd[1342]:   Unable to connect to CUPS server localhost:631 - Connection refused
Sep  8 08:30:39 vagrant-centos65 smbd[1312]: [2014/09/08 08:30:39.852067,  0] printing/print_cups.c:528(cups_async_callback)
Sep  8 08:30:39 vagrant-centos65 smbd[1312]:   failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Sep  8 09:37:44 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 16: 21091 blocks in bitmap, 21092 in gd
Sep  8 09:40:01 vagrant-centos65 logrotate: ALERT exited abnormally with [1]
Sep  8 09:43:50 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 7: 7013 blocks in bitmap, 6546 in gd
Sep  8 09:43:50 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.

ここに注目。

EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd

どうもEXT4の「/dev/sda1」がおかしい模様。

前にvmがいきなり落ちたのが原因かも・・・。

ちなみに以下のような構成

# mount
/dev/sda1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/VgData01-LvData01 on /var/www/html type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/vagrant on /vagrant type vboxsf (uid=500,gid=500,rw)

 

# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/sda1                      7.3G  2.4G  4.6G  34% /
tmpfs                          939M     0  939M   0% /dev/shm
/dev/mapper/VgData01-LvData01   91G  729M   86G   1% /var/www/html
/vagrant                       863G  239G  625G  28% /vagrant

以下のページを参考に修復を開始。

vagrant up途中で止まったりvagrant sshがconnection closeでもあきらめちゃだめ、destroyしちゃだめ

システム起動時にUNEXPECTED INCONSISTENCYエラーが発生した場合は

Linuxで次回起動時にfsckを強制または抑止する方法について

/etc/fstab – ファイルシステム情報の設定

具体的には

ホスト機にディスプレイ、キーボード、マウスをつなぎ、
Vagrantfileファイル内の以下の箇所を変更。

# vb.gui = true
↓
vb.gui = true

 

$ vagrant up

ホスト機上でGUIで起動するので以下を実行。

# touch /forcefsck

一旦サーバを落とす。

# shutdown -h now

もう一回

$ vagrant up

すると途中でrootのパスワードを聞かれる。

Give root password for maintenance
(or type Control-D to continue):

ファイルシステム修復用のシェルが起動するので対象を確認する

# mount

今回は/dev/sda1なので以下のコマンドを実行

# fsck -t ext4 /dev/sda1

後はビビりながらEnterを押し続ける。

***** FILE SYSTEM WAS MODIFIED *****
***** REBOOT LINUX *****

↑上記のようなメッセージが出たら脱出

# exit

その後は普通に起動。

「/var/log/message」を確認してみる。

ちなみに今回の修復をするなかで、ルートファイルシステムでfsck場合は
シングルユーザモードで行うと書かれていたので、ゲストにSSHで
ログインしたまま

# /sbin/init 1

したら接続が切られて焦ったのでやらないほうがいい。。
この状態になったら

$ vagrant halt
$ vagrant up

で元に戻った。

あとホスト機でGUIモードで起動してrootログインしてから
シングルユーザモードになって

# fsck -t ext4 /dev/sda1

打っても稼動中って出て修復できなかった。
あー読み込み専用にしないといけなかったのかな。。

あと、
「/etc/fstab」を開きルートファイルシステムの6個目のフィールドを1に変更もやっておいたほうがよい。

historyコマンドに日付を表示させる

historyコマンドに日付を表示させるメモ

bash 3.0 以上で「HISTTIMEFORMAT」を設定します。

export HISTTIMEFORMAT='%F %T '

↑は一時的なものなので次回ログイン時に元に戻ります。
設定を永続的に行う場合は各ユーザの「.bashrc」に以下を追記します。

HISTTIMEFORMAT='%F %T '

すべてのユーザに対してまとめて設定したい場合は「/etc/profile」に追記します。