OpenVZ環境のApacheとMySQLでメモリ節約してやりくりする
先日の続きでメモリが少ないVPS環境でなんとかやりくりする方法を考えました。
OpenVZのメモリ管理 - Guyon Diary
各種リソース表示コマンドでメモリ消費が大きいものがApacheとMySQLであることはわかりました。
MySQL編
まずはMySQLのメモリー消費を抑える為にとった方法は、機能を制限する事。
今回ネックになっているのが初期使用メモリなので、DBのCRUD処理やMySQL自体の機能を使う以前の問題です。
一番効果的な方法がこれです。
【ON時】
Mem: 262144k total, 256292k used, 5852k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
【OFF時】
Mem: 262144k total, 173092k used, 89052k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
デーモンを起動しているだけの状態で80Mの差があります。
128Mしかない環境での80Mは「天と地くらい」の違いを感じられると思います。
MySQLのDBストレージエンジンはMyISAMを使う事になり、トランザクション関係とか行ロックなどの機能差がでてきますが、ネガティブな事ばかりではないと思います。詳細はid:naoyaさんのMyISAM vs InnoDB - naoyaのはてなダイアリーがわかりやすいと思いました。
限定的なリソース環境なのでMyISAMが有利に働いてくれるとうれしい。
今回の環境構築の最終目的はVPSでRailsアプリ運用なので、Railsとの絡みも確認と。。。
- テストを使わないモードでトランザクションの設定をする必要がある
- test/test_helper.rb
- self.use_transactional_fixtures = false
- ロールバックをしないようになる。
- test/test_helper.rb
- Migration
- ActiveRecord
メモリ関係に話を戻して、他にできる事といったらバッファサイズを変更したり??
とりあえず、これで様子を見る。
Apache2編
次はApacheです。
たぶん、Apacheの方がメモリを食っています。
Apacheも設定次第でメモリを減らせると思います。
モジュール削除などで機能を減らすより、パフォーマンスを落とす方法を選びました。
【PC関係のメモ】Hajime Miyauchiさん
http://www.mylab.jp/diary/20031205.html
を参考にさせて頂きました。
- apache2.conf
- StartServers
- 減らす
- MaxSpareServers・MinSpareServers
- これも減らす
- MaxClients
- いやいやもっと極端に減らす
- MaxSpareThreads・MinSpareThreads
- 減らすってば
- ThreadsPerChild
- 〃
- StartServers
これでかなり初期メモリ使用量を減らす事に成功し、MySQLとApache2を同時に起動する事ができました。
ただしパフォーマンスには疑問があるので、様子を見ながら調整していく事にします。
【TODO】
あまりにもパフォーマンスや運用に無理があるなら、lighttpdやsqlite3も検討する。