Ubuntu12.04のulimitの上限を上げる.
Ubuntu 12.04(他のLinux系OSも同じだと思う)でこんなプログラムを動かすと.
IOError: [Errno 24] Too many open files: xxx
っていうエラーがでる.
以下のコマンドで確認できるファイルオープン数の上限が1024になっているせいでファイルオープンできなくて,エラーを吐いている.
ulimit -n >1024
以下のサイトを参考にファイル上限をあげてみた.vagrantで動かしているUbuntu12.04 LTS Serverで実験した. How to set ulimit in ubuntu linux? getting sudo: ulimit: command not found error | ubuntu forums
編集内容
sudo emacs /etc/security/limits.conf
以下を追加
vagrant hard nofile 65535 vagrant soft nofile 65535
sudo emacs /etc/pam.d/su
以下のコメントアウトをはずす
# session required pam_limits.so
sudo reboot
再起動後,同じプログラムを動かしてもエラー吐かなくなった.
ファイルオープン数の上限に達すると,TCPソケット開けないし,ライブラリのインポートできないしで,オワタ状態になるのでチューニングちゃんとしないといけないっすね.
eth1のIPアドレスをワンライナーで取得する.
ifconfig | grep eth1 -A 2 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'
UbuntuでNASをマウントする方法(smb)
$ sudo mkdir /mnt/smbfs $ sudo apt-get install smbfs $ sudo mount -t smbfs -o username=[user_name] -o password=[password] //192.168.x.x/[folder] /mnt/smbfs/
夜間バッチでzabbixのトリガーを発動させない方法
zabbixを使って監視をしている.
最近,夜間に走らせているDBのバックアップスクリプトのせいで,
PROBLEM: Disk I/O is overloaded on XXX
のアラートメールが来まくる.
良くない.
Template OS Linux
のデフォルトでは直近5分間のiowaitが20%を超えるとトリガーが発動するらしい.
{Template OS Linux:system.cpu.util[,iowait].avg(5m)}>20
これを,夜間の一定時間だけトリガーを発動しないように変更した.
3時から4時の間はトリガーを発動しない.
( {Template OS Linux:system.cpu.util[,iowait].avg(5m)}>20) & (({Template OS Linux:system.cpu.util[,iowait].time(0)}>040000) | ({Template OS Linux:system.cpu.util[,iowait].time(0)}<030000))
こんな構造になっている.
A & ( B | C )
当初は,これを条件式ビルダーでつくろうとしてうまくできなかった.
かっこの使い方がミソみたい.
motoはソケットを使うライブラリと併用できない問題
motoを使ってテストをしてた時,テスト中にテストが進まなくなる現象が起きた.
テストを見てみると,pymongoを使ってmongodbを叩いているプログラムのテストだった.(もちろんそのメソッドでbotoを使っていた)
そのテストはmockを使わずに,実際のmongodbインスタンスを使ってテストしていた.
悩んでいると,横の席の彼がこんなリンクを送ってくれた.
Interference with other network code · Issue #9 · spulec/moto · GitHub
要約するとmotoは全てのソケットをインターセプトしてしまうらしい.
なので,motoを使ったテストでは.httpリクエストやDBアクセスなどはモックを使って行わなければならないようだ.
requestを使ったサンプル
requestsを使ってHTTPアクセスするプログラムで実験してみた.
サンプルプログラム
requestsでgoogleにアクセスして,そのステータスコードをS3に保存するプログラム.
問題のあるテストコード
$ python test_with_moto_and_requests.py
このテストを実行するとかえって来なくなる.
動くテスト
ちゃんとrequestsのモックを作ってあげてテストをしたら良い.
pythonでbotoを使ったプログラムのテストをする
pythonでS3を使ったプログラムを書く際に使用するライブラリとしてbotoが有名だと思う.
使い方は以下のサイトとかを参考にしたらいいと思う.
boto でさくらのBASE Storageを弄る « 不定期な記録
botoのサンプルプログラム
すごく簡単なサンプルはこんな感じ.
ホームディレクトリに.boto
を置いてあげなきゃいけない
[Credentials] aws_access_key_id = <your access key> aws_secret_access_key = <your secret key>
motoを使ってテストする
プログラムを書いたらテストをしなきゃないけない.
しかし,テストのたびにS3にファイルを作られても困る.
あと,CIサーバには認証情報を置きたくない.
そんな時にはmotoを使うと良い.
普通にユニットテストを書いてみた.
ここで,~/.boto
を削除して認証情報をなくした上で,テストを実行してみる
$ rm ~/.boto $ python test.py E ====================================================================== ERROR: testMain (__main__.BotoSampleTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 13, in testMain self.assertEqual(sample(), 'test') File "/Users/kawasakitoshiya/workspace/tmp/mock_s3/boto_sample.py", line 5, in sample conn = boto.connect_s3() File "/Users/kawasakitoshiya/.virtualenvs/default/lib/python2.7/site-packages/boto/__init__.py", line 140, in connect_s3 return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs) File "/Users/kawasakitoshiya/.virtualenvs/default/lib/python2.7/site-packages/boto/s3/connection.py", line 190, in __init__ validate_certs=validate_certs, profile_name=profile_name) File "/Users/kawasakitoshiya/.virtualenvs/default/lib/python2.7/site-packages/boto/connection.py", line 568, in __init__ host, config, self.provider, self._required_auth_capability()) File "/Users/kawasakitoshiya/.virtualenvs/default/lib/python2.7/site-packages/boto/auth.py", line 879, in get_auth_handler 'Check your credentials' % (len(names), str(names))) NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials ---------------------------------------------------------------------- Ran 1 test in 1.090s FAILED (errors=1)
認証情報が無いのでテストに失敗する.
motoを使ってテストする
motoはS3のモックを作ってくれる.
気を付けなきゃいけないのは, motoが作ってくれるモックに,プログラムで使用するのバケットをテストコードで毎回生成してあげること.
$ python test_with_moto.py . ---------------------------------------------------------------------- Ran 1 test in 0.057s OK
これで快適boto生活!
注意点
motoはソケットを使うプログラムと併用できない仕様になっているみたいなので,注意が必要. それについては次の記事でかいてみようと思う
qpstudyに行ってきた
業務経験半年な右も左もわからないペーペーのインフラエンジニアなので
qpstudy 2014.04 一般枠 〜俺の屍を超えて行け、でも踏まないで〜 on Zusaar
に参加してきました!
勉強会って結構敷居高いイメージあるけど、すごく敷居が低い感があって行きやすかったです.
あとインフラの勉強会ってあんまり見たことなかったのですごくありがたかったです.
セッションの感想
インフラエンジニアとは、なんだ @sho7650 さん
http://www.slideshare.net/sho7650/ss-33703096
インフラエンジニアって一般的にどこまでが役割かってのを理解できていませんでしたが、
データセンター/ネットワーク/ハードウェア/OS/ミドルウェア/アプリケーション
っていうレイヤーがある中で
ネットワーク/ハードウェア/OS/ミドルウェア
っていうのは"基盤"としての妥当なだよね.っていうことで、 インフラエンジニアを名乗る上でそこは必ず習得すべきだと思いました.
あと,ウォーターフォールモデルの各ステップについて具体的にどういうことをやるべきかっていうのを話してくださり非常に参考になりました. 学校で勉強して,理解しているつもりでも,よくわかっていないものなので,感覚を聞けたのは収穫でした. アジャイルも結局はウォーターフォールを小さくしたものの繰り返しっていうのは賛同しました.
非機能要件グレードはちゃんと見てみようと思いました.
ウォーターフォールモデルで何をすべきかっていうところは是非スライドを見て欲しいです.
インフラアーキテクチャ設計の勘所 @sechiro
http://www.slideshare.net/sechiro/qpstudy201404
"インフラ設計のインプット"
機能要件はブレークダウンしていけば洗い出しをしていくことができるけど,非機能要件はブレークダウンしていくだけでは出てこないことも多い.非機能要件を洗い出すために,経験や過去の案件から出したり,非機能要件グレードか洗い出したりしていくことが必要になる.
非機能要件グレードは有効に活用していこうと思いました.
要件をインフラ設計に落とす ベースはWeb三層モデル
なぜ三層にわけるか? + 層ごとの目的に特化したソフトウェアの組み合わせができる + 共通モデルを採用することで層ごとの入れ替えができる
基本的にWeb三層モデルを使えば多くの場合には対応可能ですね.
壊れていいものと壊れてはいけないものを分けることも重要だと感じました.
インフラエンジニアには説明責任がある 守破離
ハードウェア設計の勘所 @hasegawさん
http://www.slideshare.net/TakeshiHasegawa1/qpstudy201404-dist
プロセッサー,メモリ,ネットワーク,ストレージの動作原理を解説していただき,ちゃんと勉強しなきゃなと思いました.
ストレージで以下のことを意識して設計をする必要がある + HDDは Read/Writeは同じくらい + SSDは Readは高速 書き込みは低速 書き換えはど低速
最近のフラッシュドライブのIO性能は,ちょっと前のDIMMを上回っているというのは知らなかったので,メモリ制約のある場合はフラッシュドライブでがんばるのも検討してみたい.
RAID構成でストレージを使う場合に気をつけるべき点も勉強になりました.
OSとネットワーク設計の勘所 @yktkoさん
http://www.slideshare.net/yktko/20140419qpstudyosnw
レイヤ感覚
どこでどんな処理が起こっているかを理解することは重要.
自分で障害対応した時も,レイヤ感覚がなかったので,問題の切り分けをうまくすることができなかったので
この感覚をもっと付けなければと思いました.
特にカーネルのとことかは見つけづらいので,経験は大事.
これ欲しい
- 作者: 高橋浩和,小田逸郎,山幡為佐久
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/11/18
- メディア: 単行本
- 購入: 14人 クリック: 197回
- この商品を含むブログ (118件) を見る
時間間隔
cronをサーバに設定した結果... File System Full
ちゃんと考えて自動化します
ログローテーション 障害対応の時はしっかりお世話になっているので,どういう原理でローテーションされているのか理解して活用していきます
システムタイム 2038年が恐い.
トラブル感覚
実際にサーバを触って何が起きているかをわかるようにならなければ.
いつ来るかわからない15分のために常に準備をしているのがプロ.
来ないかもしれないと言って,準備しないのがアマチュア
ミドルウェア設計の勘所 @nekoruriさん
http://www.slideshare.net/nekoruri/4-33705917
"ミドルウェア"って結局どこのことか.→HW/OS/アプリ以外の全て
ビジネス的価値を持つアプリケーションを動かすための超重要なソフトウェア.要件を満たすようにそれらをうまく組み合わせて行かなければならない.
Web+AppサーバはStatelessに保っていつでも再構築できるように設計する.
DBサーバのデータは死ぬ気で守る
サービスの特性に合ったDBを選定することは重要
メトリクスをしっかりと取って,ボトルネックの把握をする.
推測するな計測せよ
どうすればこの先生き残れるかも伝えてくださったので,そこを意識して行かなければ.
@netmarkjpさん
【諸般の事情で資料は公開しない】
- 信頼を積み重ねる
- アジリティの時代 知識と経験と行動力とクラウドとプログラミング
- 自分が変えられるのは自分だけ
- 答えはない.重要なのは相手にとっての価値
- 先生を見つける
インフラエンジニアとしてはもちろん,社会人としてどう生きていくかについても学びがあった.
今回は予定があって,懇親会いけなかったけど次回こそいこう