Saya juga telah memukul kepala saya ke dinding saat terakhir dengan masalah memori Drupal. Inilah pengetahuan saya tentang topik ini:
1. Tampilan (dapat) menggunakan banyak memori
Saya suka saya beberapa Views (dan Panel dan CTools dan semuanya menyentuh merlinofchaos dengan jari-jarinya yang perkasa), tetapi dimungkinkan untuk membuat konfigurasi dengan beberapa hubungan yang menggunakan banyak memori. Jika Anda menonaktifkan Tampilan Anda dan masalah memori hilang, kemungkinan tampilan yang dibangun dengan buruk menyebabkan masalah.
Apa yang harus dilakukan jika itu adalah Tampilan, dan Anda benar-benar membutuhkan Tampilan itu untuk berfungsi? Cobalah memasukkannya ke dalam kode (Melalui Eksportir Massal atau Fitur; lihat di bawah. Saya memiliki fungsionalitas seperti tampilan kode tangan untuk meningkatkan kinerja dengan sedikit keberhasilan) sebagai permulaan. Pemikiran lain adalah mengulang Tampilan dengan cara yang berbeda - jika pada akhirnya yang Anda dapatkan adalah istilah taksonomi, pastikan jenis Tampilan adalah Tampilan Taksonomi saat membuatnya; jangan membuat Tampilan Konten yang menggunakan hubungan untuk mendapatkan persyaratan taksonomi.
Bisa juga layak disebutkan di sini bahwa Panel juga seharusnya menggunakan banyak memori - saya belum benar-benar membandingkannya jadi tidak dapat mengkonfirmasi ini.
2. Memindahkan barang dari database ke kode adalah praktik yang sangat bagus
Butuh beberapa situs Drupal untuk menyadari hal ini, tetapi menjaga semua yang dibuat melalui UI dalam basis data (konfigurasi Views dan Panel khususnya) adalah praktik terburuk Drupal. Mengapa? Ini meningkatkan beban pada database dan tidak dapat dikendalikan versi. Poin pertama sangat bermasalah dalam hal penggunaan memori - alih-alih hanya memuat konten dari tampilan dari database, situs juga harus memuat komponen tampilan itu sendiri. Ini diperparah dengan bagaimana Drupal menggunakan tabel: dengan mengabstraksikan semuanya ke tingkat ke-n, setiap bit fungsi Drupal menggunakan tabel baru, menghasilkan beberapa permintaan bergabung dengan tabel bajillion bersama-sama. Ini memberi orang-orang Ilmu Komputer hernia (peringatan: tautan itu konyol), tetapi tidak dapat benar-benar dihindari dengan perangkat lunak yang modular dan ramah pengguna seperti halnya Drupal.
Solusinya? Gunakan Eksportir Massal (Termasuk dengan CTools) atau Fitur untuk mengemas bit kode yang saat ini berada di database sebagai kode modul.
3. Tema juga bisa memakan memori
Apakah tema Anda memiliki banyak file templat (yaitu, file dengan nama / templat /)? Jika demikian, memori dikonsumsi setiap kali salah satu file tersebut dimuat. Jika Anda membuat template khusus untuk mencegah bit Drupal agar tidak ditampilkan, cobalah:
- Mengubah izin sehingga bit tersebut tidak muncul untuk peran pengguna non-admin tertentu.
- Menggunakan CSS untuk menyembunyikan elemen.
Pilihan pertama jelas-jelas adalah apa yang ingin Anda lakukan untuk hal-hal yang memengaruhi keamanan - Anda tidak ingin menggunakan CSS untuk menyembunyikan tombol "edit" untuk pengguna tertentu, hanya dengan meminta mereka lalu menyembunyikannya melalui Firebug atau apa pun.
4. Jangan berlebihan dengan modul contrib
Walaupun terkadang situs membutuhkan banyak modul contrib, jangan berlebihan. Setiap modul yang diaktifkan (catatan: diaktifkan. Modul yang dinonaktifkan tidak menggunakan memori apa pun) menggunakan memori. Ini agak jelas, tetapi perlu diperhatikan.
5. VPS (kadang-kadang) bohong
Dalam pengalaman saya, beberapa perusahaan hosting yang tidak bermoral suka mencoba mendorong situs Drupal ke server VPS - mereka lebih mahal dan membebaskan ruang hosting bersama untuk situs web WordPress yang semakin banyak. Situasi ini diperburuk oleh kenyataan bahwa hosting sering tidak beriklan (Atau bahkan dengan sukarela memberi tahu Anda jika ditanya) berapa batas memori atas untuk hosting bersama.
Sayangnya, sering kali jika sebuah situs tidak berada di bawah lalu lintas yang padat dan masih macet, masalah ini mungkin lebih berkaitan dengan konfigurasi Drupal daripada yang lainnya. Mendorong pengguna ke VPS hanya membuat kekacauan air dan menambahkan lebih banyak variabel untuk ditangani (Apakah ini konfigurasi server? Konfigurasi PHP? Konfigurasi tamu VPS? Konfigurasi host VPS, bahkan?).
6. Ketika semuanya gagal, klon ke localhost dan kalahkan dengan tongkat
Ini adalah alasan besar mengapa orang menggunakan metodologi dev-staging-production dengan kontrol versi - ketika semuanya gagal, Anda dapat melakukan dump DB, git mengkloning situs ke server pengujian lokal dan kemudian secara acak mengacaukan situs di server pengujian tanpa khawatir tentang benar-benar merusak apa pun di server produksi.
Untuk masalah memori, ini biasanya berarti menonaktifkan modul satu per satu hingga menyebabkan masalah terekspos. Hal ini juga dapat mengarah ke masalah yang terkait dengan hosting - jika situs berjalan dengan baik pada instalasi lokal dengan memori yang disetel ke sesuatu yang masuk akal seperti 128MB, maka Anda tahu bahwa hosting Anda sedang retak.
tl; dr
Perasaan saya adalah chain_menu_access yang menyebabkan masalah. Coba nonaktifkan itu dan bersihkan cache, lihat apakah itu berfungsi.
Saya juga akan menambahkan jawaban ini karena saya memikirkan hal lain untuk dicoba ...