sqlalchemy.exc.TimeoutError
開発中のdjangoアプリケーションでこんなエラーが。
build/bdist.linux-x86_64/egg/sqlalchemy/pool.py:945 - connect build/bdist.linux-x86_64/egg/sqlalchemy/pool.py:210 - connect build/bdist.linux-x86_64/egg/sqlalchemy/pool.py:371 - __init__ build/bdist.linux-x86_64/egg/sqlalchemy/pool.py:685 - _do_get error:class 'sqlalchemy.exc.TimeoutError':QueuePool limit of size 30 overflow 0 reached, connection timed out, timeout 3
コネクション張りたいけど張れなくてタイムアウトしてるらしい。
これはhttpd.confで設定しているServerLimitの値のほうが大きいと、コネクション張れないプロセスが出てきてしまうため出るらしい。
30人しか座れないラーメン屋に60人きたようなもん。
なのでsqlAlchemyで設定しているコネクションプールの本数をServerLimitの数と同じにしておいた。
httpdが起動しなくなった
負荷かけてたらhttpdが落ちた。
で、スタートさせようとしたらこんなエラーが
$ service httpd start httpd を起動中: (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs
status確認したらPIDが残ってるとの事だったので残っているプロセス消した
$ pkill httpd
で、起動を試す。
$ service httpd start
起動できた。
ディスク・ドライブの状態を確認するコマンド
マウントされているディスク・ドライブの状態を確認する。
「df」
$ df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/xvda1 6192704 4589848 1288284 79% / none 856180 0 856180 0% /dev/shm
-hを付けると見やすい表示にしてくれる。
$ df -h Filesystem Size Used Avail Use% マウント位置 /dev/xvda1 6.0G 4.4G 1.3G 79% / none 837M 0 837M 0% /dev/shm
このdfって何の略なんだろう
AWSのコマンドラインツールで接続できなかった件
EBSのボリュームサイズを変更したり、インスタンスタイプのストレージをアタッチしたりするのにはManagementConsoleからの起動では指定できないらしいのでコマンドラインツール使ってみた。が、認証に失敗して接続できなくて困ったので解決法をメモっておく。
環境
Mac osx lion 10.7.2
状況
「Amazon EC2 API Tools」をダウンロードして適当に鍵ファイルもダウンロードしてきて環境設定の設定をしてec2verコマンドは通った。
$ ec2ver 1.5.2.4 2011-12-15
で、descrive-imagesするとエラーが出る。
$ ec2-describe-images -x all Client.MalformedSOAPSignature: Invalid SOAP Signature. Failed to check signature with X.509 cert
ついでに--debugでも実行した結果
$ ec2-describe-images -a --debug Client.MalformedSOAPSignature: Invalid SOAP Signature. Failed to check signature with X.509 cert com.amazon.aes.webservices.client.Jec2SoapFaultException: SOAP Fault[code=Client.MalformedSOAPSignature, str='Invalid SOAP Signature. Failed to check signature with X.509 cert'] at com.amazon.aes.webservices.client.Jec2Impl.UnwrapException(Jec2Impl.java:280) at com.amazon.aes.webservices.client.Jec2Impl.describeImages(Jec2Impl.java:469) at com.amazon.aes.webservices.client.cmd.DescribeImages.invokeOnline(DescribeImages.java:165) at com.amazon.aes.webservices.client.cmd.BaseCmd.invoke(BaseCmd.java:876) at com.amazon.aes.webservices.client.cmd.DescribeImages.main(DescribeImages.java:181)
ちゃんと「cert-XXX.pem」と「pk-XXX.pem」を入れてるのになんでー?と。
解決
で、色々調べてたら違う鍵ファイル使ってたみたい。
「cert-XXX.pem」と「pk-XXX.pem」のXXXの部分は同じ文字列のファイルが正解でした。
僕はamazonの証明書取得ページから「一対の鍵」の欄の所から鍵ダウンロードしてました。アホス。。
正しい取得方法は
・ X.509 証明書タブから新しいアクセスキーを作成するをクリック
・出てきたダイアログで2つのキーファイルをダウンロードしてくださいって画面が出るので両方ダウンロード。
その二つの「cert-XXX.pem」と「pk-XXX.pem」のファイルのパスを環境変数に指定し直せば通るはずです。
こんな所でハマる人はあまり居ないかもしれないけど、一応残しておく。
AWSのIAMが便利
最近ec2を触ってるのですがIAMってのが便利そうなのでメモっておく。
どんなものかって言うと、サービスごと(EC2とかS3とか)に権限(見るだけとか設定変更できるとか)を設定できるグループ、ユーザーを作成できる。
それこそ今まではunix系OSなどで常にrootログインしていたようなものが、それぞれ権限(rwx)を持ったグループやユーザーを作成してそのユーザーからログインするようにするのと同じ感じ。
詳しい設定方法はこの記事が詳しかった。
これで共同開発者にもAWS管理画面を安全に公開することができそう。
でもさっき試しにテストユーザー作ってAdministrator Access権限与えてみたけど管理コンソールからEC2やその他もろもろの情報が見れなかった・・・
IAMのページは観覧・編集できるのだけれども。
なんでだろう。。
windowsXPでbash
bash使いたくて試行錯誤した。
最初win-bashでやってみたけど配列とか使えなくて、cygwinもなんかあれだし結局SFUとやらを使いました。
・ダウンロードページ
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=896c9688-601b-44f1-81a4-02878ff11778&DisplayLang=ja
で、ダンロード -> 解凍 -> 解凍先の「sfusetup.msi」ダブルクリックでインストール。
その後 スタート -> 全てのプログラム -> Windows Services for UNIX -> C Shell から色々遊んでみたけど
bashが無い....
ということで入れる。
まずはパッケージを簡単にインストールするためのコマンドを入れないといけないらしい。
http://www.suacommunity.com/pkg_install.htm
ここの「Bootstrap Installer (3.5) 」のリンクからダウンロード。
で「pkg-current-bootstrap35.exe」ってのダウンロードされたけどこれをどう使えばいいんだ!?って思ったけど実行したら使い方書いてあった。C Shellからposix使っていれるっぽい。
でも面倒なので【C:\SFU\tmp】にさっきのexeファイル入れてダブルクリックでいけた。
これでパッケージを簡単にインストールするためのコマンドが入ったので、あとはC Shellから
pkg_update -L bash
でbash入る。
・参考サイト
http://www.atmarkit.co.jp/fwin2k/win2ktips/1369suatools/suatools.html
windowsでunixなコマンドを使う
cygwinも試したんだけどセットアップ面倒だしもっと手軽にコマンドプロンプトでdirの代わりにlsとか打てる手軽な方法ないかなーと思ってたらこんなのあった
・win-bash
http://sourceforge.jp/projects/sfnet_win-bash/
ここの「shell.w32-ix86.zip」をダウンロード->解凍してpath通せばコマンドプロンプトでlsとかcpとかcatとかmvとかrmとかのよく使うコマンドが使える。
便利!
wgetで保存ディレクトリとファイルの両方を指定する
「-O」と「-P」両方指定してみたけどなぜか効かなかったので(-Pが無視されるような挙動になった)下記の方法で指定した。
wget -O /root/unko http://hogehoge.com/
・保存したいディレクトリは「/root」
・保存したいファイル名は「unko」
とする。
ちなみにうまく動かなかった時は下記のように指定した。
wget -O unko http://hogehoge.com/ -P /root/
なんでだろう
SSHの鍵交換でPermission denied
パスワード入力無しでSSHを実現しようとして壁にぶつかったので解決方をメモしておく。
環境
centos6
秘密鍵名:id_hogehoge
公開鍵名:id_hogehoge.pub
状況
接続元のサーバーの~/.sshディレクトリに秘密鍵を入れて、接続先の~/.ssh/authorized_keysに公開鍵の内容を追記した。
その状態で SSH {接続先のIP} をしたけど下記のメッセージが表示されて接続できない。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
解決
結論から言うと秘密鍵の名前(id_hogehoge)がまずかった。
sshに「-vvv」オプションをつけて実行するとデバッグプリントが表示されるのだけれど、どうもid_hogehogeを見に行ってくれてなさそうだという事で調べてみたら案の定そうだった。
どうやらデフォルトでは~/.ssh/id_dsa ,~/.ssh/id_ecdsaおよび~/.ssh/id_rsaの名前の秘密鍵しか読みにいかないらしい。
増やしたい場合は設定ファイル(/etc/ssh/ssh_config)にIdentityFileプロパティを追加する.
IdentityFile ~/.ssh/id_hogehoge
設定ファイルを編集したくなかったら秘密鍵の名前を大人しくid_rsaにするのでもOK。
ちなみにここにたどり着くまでに↓のような点もチェックした。
・ユーザーのホームディレクトリのパーミッションは適切か(700など).
・~/.ssh ディレクトリのパーミッションは適切か(700など).
・秘密鍵のパーミッションは適切か(600など).
・puttyで作ったopenssh形式に公開鍵は変換("ssh-keygen -i -f Puttyで作った公開鍵 > openssh形式の公開鍵")しないといけない.