Apa cara ideal untuk profil penggunaan memori WordPress?

8

Kami sedang menjalankan instance multisite WordPress di dua server Rackspace Cloud, satu web dan satu database, dengan sekitar 30 situs saat ini. Saya telah menempatkan Nginx di depan untuk aset statis dan Apache menangani semua permintaan dinamis. Saya juga mengkonfigurasi Memcached untuk basis data dan caching kode APC untuk PHP. W3 Total Cache diaktifkan secara default di semua situs yang kami miliki.

Ini jahat cepat dengan satu masalah: proses Apache secara teratur menimbang antara 80 dan 120 MB. Server web memiliki 2 GB memori, yang berarti saya mendapatkan 15 atau lebih proses sampai semuanya berjalan lancar. Prosesnya jelas tidak boleh sebesar itu, tetapi saya bingung mengapa mereka begitu.

Apa strategi yang baik untuk mengidentifikasi apa yang terjadi?

Terima kasih sebelumnya!

Pembaruan 10/2/10: Bagi mereka yang bertanya-tanya, resolusi masalah masalah memori adalah menonaktifkan PHP xdebug (secara tidak sengaja diaktifkan pada konfigurasi dan menyebabkan lonjakan penggunaan memori secara acak).

Daniel Bachhuber
sumber

Jawaban:

4

Jumlah memori proses apache yang Anda bicarakan (80 hingga 120 MB per proses) dapat dibagi menjadi dua alasan.

  1. Apache
  2. Wordpress

Apache

Anda dapat mengoptimalkan apache dengan hanya memuat jumlah modul yang Anda butuhkan dan tweak optimisasi lainnya yang akan mengurangi memori. Jika Anda belum mengoptimalkannya, berikan beberapa penyesuaian.

Wordpress

Wordpress hanya menghabiskan banyak memori dan tidak terlalu optimal sama sekali. Saya akan mulai dengan mengganti kelas database dengan sesuatu yang lebih baik diimplementasikan. Itu seharusnya menambah kecepatan dan mengurangi penggunaan memori. Selain itu saya belum banyak menyarankan. Tidak menggunakan Worpdress dianggap tidak membantu kurasa.

Strategi

Untuk mengetahui apa yang terjadi, Anda perlu melacak berapa banyak memori yang digunakan oleh permintaan wordpress. Ada fungsi penggunaan puncak get ( memory_get_peak_usage()) yang dapat Anda gunakan untuk memantau penggunaan memori worpdress. Jika mendekati 80 - 120 MB yang Anda tulis, Anda tahu bahwa wordpress membuat Anda sakit kepala. Anda mungkin ingin mencatat cap waktu, memori puncak, waktu eksekusi dan meminta URI.

Menggunakan Nginx untuk melayani halaman wordpress yang di-cache pasti akan membantu Anda karena itu akan mencegah wordpress dari dimuat - bahkan untuk cache "inbound" seperti yang Anda gunakan. Mereka secara konseptual rusak karena mereka adalah plugin wordpress, jadi setidaknya sebagian dari wordpress perlu dimuat bahkan untuk hasil cache

hakre
sumber
1

Daniel,

Saya dengan hormat tidak setuju dengan kenkeiter, saya mengerti menggunakan nginx sebagai proxy terbalik di depan Apache. Hukum Harvard telah sukses besar dengan metode ini dan mereka memiliki artikel yang bagus tentang bagaimana mereka melakukan ini, dengan tautan ke plugin WordPress mereka yang membantu berinteraksi dengan nginx:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Apa yang mereka temukan di Harvard Law adalah bahwa, dengan nginx pada dasarnya menyimpan semua permintaan di front-end, itu sebenarnya tidak meningkatkan kinerja untuk menggunakan plugin tipe-cache lainnya di backend, dan tidak sebanding dengan kompleksitas tambahan. Jika Anda serius menggunakan nginx dengan cara ini, saya sarankan Anda melihat artikel itu tentang pengalaman mereka dan mencoba untuk mengecilkan proses dinamis, termasuk caching sisi-WP.

Beberapa pembersihan dasar seperti melihat dengan hati-hati pada akses Apache Anda dan log kesalahan untuk melihat jenis pertanyaan apa yang sebenarnya harus dilakukan secara dinamis dan mencoba mengurangi kasus seperti itu juga bisa menjadi awal yang baik.

mitcho
sumber
0

Nah, pertama-tama, Anda menggunakan Apache dan Nginx - agak berlebihan. Anda harus menggunakan Nginx / FastCGI w / PHP. Tutorial di situs ini akan membantu. Jika tidak, tebakan terbaik saya adalah bahwa beberapa perubahan terbaru pada kode Anda menyebabkan beberapa bug di PHP tidak melepaskan memori dengan benar. Tidak ada alasan bahwa proses Apache harus mengkonsumsi memori sebanyak itu.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

Semoga berhasil!

@kenkeiter


sumber
Nginx / FastCGI akan luar biasa, tapi itu di luar ruang lingkup pemecahan masalah ini
Daniel Bachhuber