serverspec 0.5.6 に上げたところ、
- テストの実行が遅い
- SSH のセッションが切れる
ようになった(Solaris 上で実行)。
これは 0.5.6 でテスト毎に check_os が走るようになったことが原因。
check_os は以下のようになっていて、テスト対象の OS が Solaris だと、
1 つのテストにつき check_os で 5 個、テスト自体で 1 個の計 6 個のコマンドが実行される。
そりゃ、遅くなるよねって話です。
def check_os if run_command('ls /etc/redhat-release')[:exit_status] == 0 'RedHat' elsif run_command('ls /etc/system-release')[:exit_status] == 0 'RedHat' # Amazon Linux elsif run_command('ls /etc/debian_version')[:exit_status] == 0 'Debian' elsif run_command('ls /etc/gentoo-release')[:exit_status] == 0 'Gentoo' elsif run_command('uname -s')[:stdout] =~ /SunOS/i 'Solaris' elsif run_command('uname -s')[:stdout] =~ /Darwin/i 'Darwin' else 'Base' end end
SSH のセッションが切れる件は、sshd のログを調べたところ、
Disconnecting: pipe failed: Too many open files
と出ていて、check_os がテスト後に実行されることで
sshd の file descriptor を食い潰していたもよう
(Solaris の sshd の file descriptor は 256 しかない。)
対策としては
- check_os の実行をさせない
- spec_helper.rb の include Serverspec::Helper::DetectOS を
include Serverspec::Helper::Solaris など特定の OS に置きかえる
- OS type caching per hosts · Issue #149 · mizzy/serverspec h
https://github.com/mizzy/serverspec/issues/149
- sshd の file descriptor を増やす
check_os を実行させないようにしても、
テスト自体の数が増えれば file descriptor を使い果たすので、
sshd の file descriptor を増やすことを考えた方がよさそう。
OS type caching per hosts は 0.6.2 で追加された。
- Add OS type caching to Helper::DetectOS by mizzy · Pull Request #151 · mizzy/serverspec
https://github.com/mizzy/serverspec/pull/151
[2013-06-13-3] sshd の file descriptor の制限を変更する