MaxRequestPerChildは変更したほうがいいよ!
こんにちは。ぽんです。
早速ですが昨日、ウチのサービスのサーバーが落ちました。
大人の数学勉強中に鬼電がかかってきて、中断して調査と対応。
(講師の方すみませんm(_ _)m)
なんかメモリがswapも含めて使いきっていて強制ダウン。
(おそらくOOMKiller発動)
その日はとりあえず復旧させただけで、落ちないことを祈りつつ就寝
今日になって今後の対策なんとかしなきゃなーと思って調査を開始したところ、
3日ぐらい前からやたらとふえてるじゃありませんか!
そういえばあの時あれリリースしたなぁ。。。
あれのせいかなぁ。。。
うーん。。。
この増え方なんかおかしいぞー。。。
muninでメモリの使用量の推移をみてみるとなんかメモリリークしてるっぽい。
でもPHP基本無いはずなんだけどなぁ。バッチ処理ならわかるけど。
とりあえずtopで見てみると、
!!!!!!!
!!!!!!!!!!!!!!
httpdのメモリ使用量が1G!!!!?????
根本はなぜかはよくわかってない。
とりあえずこれを減らす方法を見つけねば!
検索すると
MaxRequestPerChildの値が4000なのが悪いっぽい。(httpd.confのprefork部分の設定)
そんなに使いまわさんでもいいでしょ!と思ったのでとりあえず500に変更
```
service httpd graceful
```
あれ1GBのプロセス消えね。
```
service httpd restart
```
消えた。
そして
安定した。
2016/06/14 追記
原因はここではなかった!
MaxRequestPerChildの値はそのままだけど、
MJ12Botなるものがやたらとアクセスしまくりが原因だった。
ということでrobots.txtでブロック
PHPで統計系関数を使う
こんにちは。ぽんです。
今日は、PHPで統計関数が必要だったので入れてみたことのメモ
最近多いですよねー。統計的な話。
↓ちなみにコレ↓
peclで入れられるようなので、
pecl install stats
とやる。
魚!めっちゃおこられた!
https://pecl.php.net/package/stats
本家見ると、どうやら最新版はPHP7以降らしい。
入っているPHPは5.3なのでそれでも対応している1.0.3をインストールする。
pecl install stats-1.0.3
●●●●→●●●...にしたいときって無い??
こんにちは。ぽんです。
よくサイト作ってると、最新の日記をトップページに5件表示するとかが発生する
そんなとき、
本文を全部出すなんてことは当然しないわけで、、
テキストテキストテキストテキスト・・・とか
テキストテキストテキストテキスト...とか
したりする。
そんなときに便利な関数があったので備忘も含めて。
mb_strimwidth
鬼便利!
Let's Encrypt導入してみた(AWS)
こんにちは。ぽんです。
最近、セブンナイツにハマってます。
ただ、、、ガチャからセブンナイツでなさすぎて若干萎えてます。
さて、Let's Encryptについてです。
2016年4月12日に正式サービスが開始しましたね。
↓本家ホームページ↓
無料でSSLが導入(かつ自動更新される!?)ということで自分のサービスが乗っているサーバー(AWS)に入れてみました。
基本的にはLet's Encrypt の使い方 - Let's Encrypt 総合ポータルの通りにやっていけば設定完了ですが、
一部詰まったのでそれも含めて書いていきます。
導入手順
① Let's Encryptのクライアントをダウンロード
サーバーに入って、適当なところで以下コマンド実行
※rootいらないよ!
$ git clone https://github.com/letsencrypt/letsencrypt
② テスト実行+必要なモジュールをインストール
cd letsencrypt sudo ./letsencrypt-auto --help --debug
※ Pythonとか、必要なものが自動でインストールされます。 ※ AWSの場合--debugをつけないとダメ
③ 証明書取得
sudo ./letsencrypt-auto certonly -a standalone -d [SSL化したいドメイン]
※ 変な画面が立ち上がりますが、メールアドレスとか入れて終了
ここで!?なんかエラーが起きるので、見てみると、
80番ポートがListen状態だと人相がうまくいかないらしい。
ということで一回apache止める
sudo service httpd stop
もう一回実行
sudo ./letsencrypt-auto certonly -a standalone -d [SSL化したいドメイン]
あれ。。。うまくいかん。。。
AWSにログインしてセキュリティグループのインバウンドをチェック。
443うけいれてないっすね〜。見事に拒否ってますね〜。
はい、許可ポート追加。
もう一回実行
sudo ./letsencrypt-auto certonly -a standalone -d [SSL化したいドメイン]
はいオッケー。
ここでapache起動
sudo service httpd start
これで/ect/letsencrypt内に証明書ができているはず!
④ 証明書設定
あとはいつも通りSSLの設定をしてあげたらよい。
※注意点は、apache 2.4.8 以降(またはnginx)、apache 2.4.8 未満で使うファイルが違うってこと
★ apache >= 2.4.8
サーバ証明書と中間証明書が結合されたファイル
SSLCertificateFileに指定
/etc/letsencrypt/live/ドメイン名/fullchain.pem
SSLCertificateKeyFileに指定
/etc/letsencrypt/live/ドメイン名/privkey.pem
★ apache < 2.4.8
SSLCertificateFileに指定
/etc/letsencrypt/live/ドメイン名/cert.pem
中間証明書
SSLCertificateChainFileに指定
/etc/letsencrypt/live/ドメイン名/chain.pem
SSLCertificateKeyFileに指定
/etc/letsencrypt/live/ドメイン名/privkey.pem
オッケー!ブラウザから確認して終了。
期間が3ヶ月になってるなー。自動化はまた確認
Qdmail + Qdsmtp + Gmailの送信不具合に関して
● 現象
3/30 AM(6:00より前ぐらい)からメール送信が不可となった。
調べてみるとGoogle側のSMTP設定の仕様変更があったらしい。
不可となる条件は、QdmailというPHPのライブラリを利用していて、
でsmtp先ホストがssl://smtp.gmail.comと指定されている場合。
gmailアカウント(SMTPサーバー)への接続に失敗するようになっており、
一切メールが送信されない。
● 暫定の対応
↓ 以下参考 ↓
https://teratail.com/questions/31065
https://productforums.google.com/forum/#!topic/gmail-ja/djNLitD1aHQ
Googleプロダクトフォーラムにあがっていた内容で
とりあえずの対応はできたが、そもそもQdmailは開発が止まっているので
PHPMailerにコンポーネントを変更する対応が必要。
クロノドラゴン始めました
こんにちは。ぽんです。
PHPからruby on railsに環境を切り替えてみる(共存)
こんにちは。ぽんです。
やっぱりruby!?ってことで今までずっとPHPを使って開発をしてきましたが、
本格的にrailsに乗り換えようと決心した。
本格的に導入したことがなかったので今更ながらrailsのインストールまでをメモ。
WebSVはnginxにしたいところだけどapache
で既にPHPが乗っている環境にrailsのインストールまでして画面表示までを行う。
rubyをインストールしないと話にならないのでrbenvを利用してrubyをインストールする
① rbenvのインストール
$ cd $ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
次に環境変数の設定
$ echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ exec $SHELL -l $ rbenv -v rbenv 0.4.0-183-gc18a3f9
rbenvのインストール完了!
ただ、rbenvだけではrubyのインストールが簡単に行えないためruby-buildをインストールする必要がある
② ruby-buildのインストール
$ cd $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
次にインストールしたいrubyを確認
$rbenv install --list Available versions: 1.8.6-p383 1.8.6-p420 1.8.7-p249 1.8.7-p302 1.8.7-p334 1.8.7-p352 1.8.7-p357 1.8.7-p358 1.8.7-p370 1.8.7-p371 1.8.7-p374
↑ こんな感じでいっぱいでてくる。 こっから選んでコマンドうつだけでインストールは完了!なんて便利!
③ rubyのインストール
とりあえず今回は2.2.0をインストール
$ rbenv install 2.2.0
結構時間かかるので、コーヒーでも飲みながらネットサーフィン。やべ。まとめおもしれ
お、気付いたら終わってた!
ということで使用するrubyのバージョンを指定する
$ rbenv rehash $ rbenv global 2.2.0 $ ruby -v ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
こう表示されれば問題無くインストール完了
④ railsのインストール!
$ gem install rails
はいエラー
nokogiriがうんたらかんたらと怒られる。
調べた結果これでいけるらしい。
$ gem install nokogiri -- --use-system-libraries
もう一度
gem install rails
ほほぉ!入った!
$ rbenv exec rails -v Rails 4.2.4
⑤ railsプロジェクトの作成
$ cd [railsプロジェクトを作成したいディレクトリ] $ rails new example -d mysql
※MySQLを利用のため あ、なんか失敗した。。
mysql2のgem installでこけてる。。
ふむ。mysql-develが足りないと。ということで
$ sudo yum install mysql-devel $ gem install mysql2
よし!!!!そしてはい、もういちど〜
$ rails new example -d mysql
おっけ!とおった!
exampleというプロジェクトのディレクトリができているはず
Rails環境をApache上で動かすにはPhusion Passengerというのが必要らしい
⑥ gemでPassengerをインストール
$ gem install passenger Fetching: passenger-5.0.21.gem (100%) Building native extensions. This could take a while... Successfully installed passenger-5.0.21 Parsing documentation for passenger-5.0.21 unable to convert "\x88" from ASCII-8BIT to UTF-8 for src/cxx_supportlib/vendor-modified/boost/thread/future.hpp, skipping unable to convert "\x97" from ASCII-8BIT to UTF-8 for src/cxx_supportlib/vendor-modified/boost/utility/declval.hpp, skipping Installing ri documentation for passenger-5.0.21 Done installing documentation for passenger after 52 seconds 1 gem installed
⑦ passenger-install-apache2-moduleを実行
$ cd .rbenv/versions/2.2.0/bin $ ./passenger-install-apache2-module -------------------------------------------- Installation instructions for required software * To install Curl development headers with SSL support: Please install it with yum install libcurl-devel * To install Apache 2 development headers: Please install it with yum install httpd-devel * To install Apache Portable Runtime (APR) development headers: Please install it with yum install apr-devel * To install Apache Portable Runtime Utility (APU) development headers: Please install it with yum install apr-util-devel If the aforementioned instructions didn't solve your problem, then please take a look at our documentation for troubleshooting tips: https://www.phusionpassenger.com/library/install/apache/ https://www.phusionpassenger.com/library/admin/apache/troubleshooting/
ほいエラー。言われたとおりにインストール
もういっちょ
$ ./passenger-install-apache2-module -------------------------------------------- Almost there! Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /home/marisa/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/passenger-5.0.21/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/marisa/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/passenger-5.0.21 PassengerDefaultRuby /home/marisa/.rbenv/versions/2.2.0/bin/ruby </IfModule> After you restart Apache, you are ready to deploy any number of web applications on Apache, with a minimum amount of configuration! Press ENTER when you are done editing. --------------------------------------------
終わったっぽい。
↑ これをapacheの設定ファイルに貼れと命令されたので社畜ばりにいうことを聞いてみる。
publicディレクトリにとりあえずindex.htmlをおいて接続テストしてみる。
うごいた!!!!!
よし、こっからガッツリやるか。