Bagaimana cara menghindari kesalahan "kehabisan memori"?

7

Saat ini saya sedang bekerja dengan Drupal 7, dan saya telah menginstal modul berikut, semua diperbarui ke versi terakhir masing-masing:

  • Tampilan - 7.x-3.0-beta3
  • CTools - 7.x-1.0-alpha4
  • Panel - 7.x-3.0-alpha3
  • Aturan, ACL, Forum tingkat lanjut, Akses Forum, Poin Pengguna, BUEditor

Saya terus mendapatkan "Kesalahan PHP Fatal: Kehabisan memori." Batas server saya adalah maksimum yang diizinkan oleh penyedia saya (32 MB). Kesalahan itu sebagian besar muncul ketika berinteraksi dengan halaman modul, tetapi juga muncul untuk setiap pengguna yang mencoba memperbarui kata sandinya, atau mengedit node.

Jadi, apakah Anda punya saran tentang cara menurunkan penggunaan memori?

PS: Saya perhatikan sebagian besar kesalahan itu termasuk tampilan dan melihat file plug .inc. Tapi itu juga menyangkut file .inc dari modul inti dan sistem ... Saya bisa menyalinnya di sana jika Anda menginginkannya.

nyoz
sumber

Jawaban:

6

Sebenarnya tidak banyak yang bisa Anda lakukan dalam kasus ini. Drupal 7 membutuhkan sedikit memori dan begitu juga Tampilan, Panel, dll.

Jika memutakhirkan ke paket hosting di mana Anda memiliki setidaknya 128MB bukan opsi, saya setidaknya akan memastikan modul-modul berikut tetap dinonaktifkan:

  • Perbarui Manajer
  • Pencatatan Basis Data
  • Bidang UI
  • Tampilan UI
  • Panel In-Place Editor
  • Modul "UI" lainnya

Lakukan pengembangan Anda secara lokal dan gunakan kontrol versi & Fitur untuk memperbarui kotak produksi Anda.

Alex Weber
sumber
2
Untuk memperhatikan bahwa Tampilan UI hanya diperlukan saat mengedit tampilan yang ada, atau menambahkan tampilan baru; untuk penggunaan normal, Tampilan UI tidak diperlukan, dan Tampilan akan bekerja secara normal bahkan ketika modul itu dinonaktifkan.
kiamlaluno
1
persis, hal yang sama berlaku untuk modul "UI" lainnya. Mereka hanya diperlukan untuk pembangunan. Fields akan bekerja tanpa UI, begitu juga Context, dll.
Alex Weber
4
Namun, tampilan (bukan UI) sendiri saat ini memiliki jejak yang sangat besar. Saya telah berupaya mencoba untuk melawan jejak memori Drupal baru-baru ini dan melihat tampilan keduanya memuat cache skema dan itu adalah cache data sendiri pada setiap halaman yang menampilkan tampilan. Itu dapat dengan mudah berarti beberapa megabita di situs dengan beberapa modul terpasang (sekitar 4MB pada uji coba saya).
Berdir
Saya harus tidak setuju dengan rekomendasi Anda untuk menggunakan fitur - modul itu adalah babi memori yang besar. Anda akan jauh lebih baik menggunakan kait pembaruan untuk menerapkan perubahan konfigurasi.
Felix Eve
secara anekdot, setelah menyiapkan situs D7 yang ada di shared hosting dan mengalami banyak masalah memori menggunakan tampilan, saya telah menemukan mengubah versi PHP dari 7 menjadi 5,6 sangat membantu. Tidak yakin penyebabnya, tapi saya sampai pada titik memungkinkan 1024M memori dan masih berjalan saat menampilkan 16 item dalam tampilan.
jammypeach
4

Seperti yang tercantum dalam Persyaratan Sistem Drupal, Drupal Core sendiri membutuhkan 32M untuk dijalankan. Menambahkan modul apa pun yang berkontribusi tanpa menambah memori adalah cara yang pasti untuk menghadapi kesalahan ini.

Jika maksimum server Anda hanya 32 juta, sekarang saatnya untuk mendapatkan hosting baru.

tim.plunkett
sumber
Yang buruk adalah bahwa saya baru saja mengubahnya ... Saya pikir saya terjebak dengannya setidaknya selama satu tahun ...... Harus memeriksanya. :(
nyoz
BTW, hoster saya adalah 1 & 1 Prancis. Saya telah membaca di beberapa forum dukungan wordpress bahwa mereka baru saja meningkatkan batas phpnya menjadi 90MB. Saya akan menelepon mereka pada hari Senin ...! ;)
nyoz
2

Seperti disebutkan, intinya adalah Anda secara realistis membutuhkan 128M. Catatan lain adalah bahwa jika Anda menjalankan rangkaian gambar, itu sering mengingatkan kita (setidaknya dalam Drupal 6) bahwa setidaknya 96M diperlukan dalam keadaan tertentu.

32M tidak akan memotongnya.

NikLP
sumber
0

Saya pikir menggunakan modul Views adalah masalah terbesar Anda.

Menulis ulang semua halaman yang menggunakan tampilan dengan permintaan khusus, menghapus modul tampilan dan sementara kami tentang hal itu juga menghapus Aturan (sekali lagi, pindahkan semua logika ke kode) dan penggunaan memori Anda akan turun segera.

Juga hanya menulis file templat dan menggunakan kait preprocess akan menghilangkan kebutuhan untuk Panel menghemat lebih banyak memori.

Ini bukan langkah mudah atau cepat untuk mengambil dan membutuhkan pengetahuan yang mendalam tentang Drupal, MySql dan PHP namun jika kinerja adalah prioritas nomor satu, ini adalah solusi terbaik (dan akan berjalan pada memori 32M).

Felix Eve
sumber