Pertanyaan tentang cara mengoptimalkan server apache / mysql pada VPS dengan RAM 512m. Di bawah beban normal, semuanya berjalan cepat, tidak ada koneksi tertinggal. Namun ketika kami mendapatkan hari-hari lalu lintas yang padat (50k + kunjungan) situs merangkak dan butuh 30 detik + untuk mendapatkan konten kembali dari apache.
Situs ini berjalan pada Expression Engine (CMS) (dalam PHP) dan saya telah mengikuti panduan pengoptimalan yang berat. Saya sudah googled dan mengikuti beberapa di luar sana untuk apache dengan sedikit keberuntungan, membawanya ke tempat sekarang, tetapi saya perlu mendapatkan waktu respon yang konstan.
Saya berasumsi ini berbeda dari pertanyaan 'optimalkan memori rendah' di sini karena saya memiliki cukup RAM (untuk apa yang saya coba lakukan), saya hanya perlu membuat server tidak tersedak di bawah beban berat.
Adakah rekomendasi ulang?
sumber
Jawaban:
Untuk PHP ada 2 hal penting yang akan meningkatkan kapasitas:
Untuk Apache:
Anda juga dapat mempertimbangkan beralih dari Apache ke Lighttpd , atau Nginx . Saya suka Apache. Saya menggunakan kebodohan dari banyak fitur canggihnya. Saya menerima overhead-nya karena saya butuh apa yang ditawarkannya. Untuk tumpukan LAMP umum, itu lebih dari yang diperlukan dan pemborosan sumber daya.
Untuk MySQL:
Alat lain yang layak dipertimbangkan adalah mk-visual-menjelaskan
Saya telah mengutip 10 referensi bagus. Hal-hal ini seharusnya membuat Anda bersenandung. Harap beri tahu kami bagaimana hasilnya.
sumber
Pindahkan file sesi PHP Anda ke tmpfs , gunakan APC (atau lainnya) dan hapus semua modul PHP yang tidak Anda butuhkan. Hapus semua modul Apache yang tidak Anda butuhkan / gunakan.
Untuk membuat tmpfs (direktori dalam RAM!)
Di / etc / fstab tambahkan baris di bawah ini untuk membuatnya di reboot!
Di /etc/apache2/php.ini sesuaikan untuk menyimpan sesi Anda dalam RAM (tmpfs)!
Catatan: Dengan file PHP DAN file sesi dalam RAM, Anda hampir tidak menyentuh disk!
Gunakan expires_module di apache sehingga browser akan melakukan cache sebagian besar hal.
Jangan gunakan file .htaccess ! Sebaliknya, kode keras mereka dalam file konfigurasi vhost! Secara drastis akan menghilangkan / mengurangi pemeriksaan diska per semua permintaan http ... benar-benar bertambah.
Contoh .htaccess yang digunakan dalam file vhost.conf Anda ...
sumber
Beberapa hal muncul dalam pikiran.
Tembolok opcode selalu merupakan ide yang bagus. Saya lebih suka http://eaccelerator.net/ daripada APC. Jika Anda belum mengembangkan dengan APC di sepanjang jalan mencoba menambahkannya hampir selalu menyakitkan. Eaccelerator sementara tidak semewah sepertinya berfungsi.
Proxy terbalik juga merupakan ide yang bagus, tetapi Anda harus memperhatikan penggunaan RAM. Saya menemukan Apache 2.2 dengan mpm-pekerja untuk mengambil cukup banyak RAM pada itu sendiri. Dalam kasus Anda, saya akan merekomendasikan sesuatu yang lebih ringan seperti Nginx dan menjalankan Apache dengan PHP sebagai FASTCGI atau biarkan sesuai proses. Gagasan dengan menggunakan Varnish, Squid, Nginx, dll adalah membuat mereka menyajikan konten statis, menangani koneksi pengguna, dan hanya mengirimkan permintaan PHP ke Apache yang Anda anggap sebagai server aplikasi.
Jika Anda menjalankan versi Mysql 5.1 yang cukup baru, seperti setidaknya 5.1.24 Anda sekarang memiliki akses ke log lambat sub detik. Saya akan memulai long_query_time pada 1 atau 2 dan kemudian menurunkannya menjadi 0,5 saat Anda mendapatkan yang lama. Ada juga banyak informasi penyetelan umum di internet untuk Mysql, tetapi Anda tidak memiliki RAM untuk melakukan banyak hal. Sudahkah Anda meningkatkan pengaturan dari default? Sebagian besar file my.cnf default dikonfigurasi untuk menggunakan sekitar 64MB RAM. Paling tidak saya akan meningkatkan key_buffer dari 16MB ke 64MB.
Selain itu, apakah Anda menggunakan tabel Myisam atau Innodb? Jika Anda menyimpan sesi di DB, Anda ingin mengubah tabel sesi menjadi Innodb (atau menjadikannya cookie) daripada membiarkannya sebagai tabel Mysiam yang melakukan penguncian level tabel daripada penguncian level baris. Pada dasarnya setiap tabel yang lebih dari 20% menulis hingga 80% dibaca adalah kandidat untuk pindah ke Innodb. Ingat Anda harus menyeimbangkan jumlah RAM antara tabel Myisam dan tabel Innodb karena buffer untuk masing-masing dikonfigurasi secara terpisah.
Dan terakhir, 512MB RAM lain akan berjalan jauh dalam pengaturan Anda atau bahkan 512PS VPS lain untuk menjalankan Mysql jika itu lebih murah atau kira-kira harganya sama. Saya benar-benar akan condong ke instance kedua karena itu akan menggandakan IO disk yang tersedia. Salah satu masalah dengan server VPS adalah IO Anda tidak terlindungi dari orang lain di server fisik yang sama.
Hmmm posting saya semua agak tersebar, tetapi memberi Anda banyak tempat untuk melihat. Semoga berhasil.
sumber
sumber
Dalam situasi memori rendah (512Mb rendah, untuk server dengan lalu lintas tinggi) ada baiknya mempertimbangkan server web dan mesin DB pilihan Anda.
Lighttp lebih ringan di luar kotak daripada biasanya Apache dapat dibuat setelah banyak tweaking, dan ada opsi lebih ringan dari itu bahkan. Ini tentu saja tidak mungkin jika ada fitur Apache yang Anda andalkan yang tidak mendukung server lain.
sqlite jauh lebih ketat daripada mySQL, dan lebih cepat dalam banyak kondisi juga. Periksa apakah mesin yang Anda gunakan mendukung ini juga dan apakah itu mencobanya.
Opsi lainnya, opsi mudah, adalah mendapatkan lebih banyak RAM di VM jika Anda mampu membelinya.
sumber
Di luar saran-saran hebat di sini, perlu dicatat bahwa semua VPS tidak dibuat sama. Dalam pengalaman saya, PHP ternyata CPU yang berat.
Tolok Ukur AB Wordpress (ab -n 500 -c 25 http://domain.com/index.php ) dari nginx / apc / phpfpm / mysql (lokal) pada EC2 menghasilkan ~ 2 permintaan / detik pada level entri "2GB RAM / 1 Hitung Unit Server ".
Benchmark yang sama berjalan melawan stack yang sama persis (digunakan oleh skrip ke OS identik) pada Rackspace Cloudserver 512MB mengembalikan ~ 80 req / detik. Jadi 4x Kurang ram, kinerja 40x dalam percobaan yang belum sempurna ini.
Melihat bagian atas selama AB Anda melihat bahwa EC2 tidak bisa menangani konkurensi, dan akan langsung menekan 100% CPU Load dan mengunci. Melihat puncak pada Server 512MB (virtualisasi quad core CPU) selama benchmark yang sama, Core akan mencapai ~ 60% Load dan menangani benchmark dengan lancar.
VPS sangat mudah diputar dan dimatikan tanpa komitmen, tidak ada salahnya untuk menempatkan infrastruktur tempat VM / VPS Anda berada dalam pengujian!
EDIT 1: Juga, Mesin Virtual "CPU Tinggi" EC2 hanya mampu menghasilkan ~ 10 / req detik, dengan CPU masih menjadi hambatan. Kesimpulan saya adalah bahwa Anda mengorbankan kinerja untuk stabilitas / ketahanan dengan EC2, dan tentu saja ada banyak kasus yang memerlukan lingkungan seperti itu.
sumber