Saya mengumpulkan situs D7 dengan subtema Minelli. Sepanjang jalan saya banyak bereksperimen dengan tema yang berbeda, modul yang berbeda. Di suatu tempat di sepanjang jalan saya mengembangkan masalah kinerja yang aneh, dan sekarang saya tidak benar-benar tahu apa tema / modul / konfigurasi yang menyebabkannya.
Masalahnya adalah ketika saya pertama kali mengunjungi situs tersebut, dibutuhkan sekitar 15 detik sebelum halaman pertama muncul. Saya kemudian dapat bergerak di sekitar situs dan sangat responsif. Jika saya meninggalkannya sekitar satu jam atau lebih, lalu kembali lagi, permintaan pertama sekali lagi sangat lambat.
Saya telah membersihkan cache agar tidak menjadi masalah. Juga, saya telah menonaktifkan tema dan modul yang tidak saya gunakan. Saya memindahkan situs ke infrastruktur baru tetapi masalahnya mengikutinya!
Ke mana saya pergi selanjutnya?
sumber
Jawaban:
Ada tiga hal yang akan saya periksa.
Pertama, jika Anda berada di situs produksi dan tidak mengedit file PHP, maka Anda harus memastikan bahwa APC diaktifkan, memiliki cukup memori, dan memiliki TTL yang panjang (Anda bisa pergi dengan satu hari atau tidak pernah kedaluwarsa jika Anda mau). Anda juga dapat mempertimbangkan pengaturan
apc.stat=0
. Dokumen APC memiliki semua informasi yang Anda perlukan untuk mengatur TTL. Untuk memilih jumlah memori, Anda harus menempel file apc.php di suatu tempat yang dilindungi dan memantau penggunaan memori dan statistik churn. Sesuaikan memori APC sehingga tingkat kesalahan Anda sangat rendah. Kelambatan awal bisa jadi karena APC penuh dan mengosongkan (IIRC, APC membuang seluruh cache saat sudah penuh alih-alih menggunakan LRU atau strategi cache yang lebih maju).Kedua, pastikan Anda telah menyetel MySQL dengan tepat. Anda dapat menggunakan mysqltuner untuk menyesuaikan ukuran buffer Anda. Kelambatan awal Anda mungkin karena memuat tabel dari disk dan / atau melewatkan cache permintaan. Meskipun tidak sempurna, mysqltuner membuat Anda pergi ke arah yang benar.
Ketiga, pastikan Anda memiliki strategi cron Drupal yang sebenarnya . Secara pribadi, saya akan menonaktifkan cron automagic pada "admin / config / system / cron" dan mengatur crontab untuk dijalankan setiap malam. Anda juga dapat mencoba Elysia Cron jika Anda benar-benar membutuhkan kendali yang lebih baik atas berbagai hal. Dengan cara ini Anda dapat menjalankan tugas-tugas yang diperlukan sesering yang Anda butuhkan, tetapi biarkan yang normal berjalan dalam semalam. Kelambatan awal Anda bisa dari cron run yang terjadi setiap jam. Anda dapat mengonfirmasi ini dengan melihat ketika cron dijalankan pada "admin / laporan / dblog" dan mencoba untuk menyesuaikan dengan kelambatan Anda.
sumber
Ivanhoe123 mungkin benar: Drupal 7 hadir dengan 'poor mans cron' diaktifkan secara default. Singkatnya, itu berarti bahwa (sesekali) cron dijalankan sebelum Drupal merender halaman, menunda semuanya.
Selalu mencoba menggunakan pekerjaan cron nyata di lokasi produksi. Untuk detail teknis lebih lanjut, lihat http://drupal.org/cron , atau berbicara dengan perusahaan hosting Anda.
Untuk menonaktifkannya, buka admin / config / system / cron dan pilih 'Never'.
sumber
The devel penawaran modul database logging untuk memeriksa apakah Anda memiliki pertanyaan berjalan lama.
Jika ini tidak membantu mengambil baik XHProf atau XDebug dan menemukan kode bersalah. XHProf (profiler) memberi Anda peta yang bagus dari semua fungsi yang sedang dieksekusi di server, dan ia memberi tahu Anda yang mana yang paling menghabiskan waktu eksekusi. Di sisi lain, ketika XDebug (debugger) dikonfigurasikan dengan IDE seperti Eclipse ( lihat video ), ini memungkinkan Anda menelusuri setiap fungsi yang dijalankan LANGSUNG. Profiler akan memberi Anda gambaran tentang apa yang sedang dieksekusi; sementara debugger akan menunjukkan kepada Anda mengapa itu dieksekusi.
sumber
Hanya dari rasa pertanyaan, saya langsung memikirkan tiga (3) hal
Mesin Penyimpanan MySQL
Jika Anda tidak menggunakan pencarian / pengindeksan FULLTEXT, saya sangat menyarankan Anda mengubah semua data MyISAM Anda menjadi InnoDB. MyISAM tidak dirancang untuk memanfaatkan banyak CPU dan banyak core. InnoDB telah sangat ditingkatkan untuk penggunaan CPU ganda dan juga baca / tulis hyperthreading.
Berikut adalah beberapa posting yang saya buat tentang ini di DBA StackExchange dan di situs ini berkaitan dengan penyetelan MySQL untuk Kinerja InnoDB
Sep 20, 2011
: Multi core dan Kinerja MySQLSep 12, 2011
: Memungkinkan untuk menggunakan MySQL lebih dari satu intiJun 07, 2011
: Bagaimana cara mengonversi basis data dari MyISAM ke InnoDB?May 26, 2011
: Tentang kinerja basis data single threaded versus multithreadedApr 15, 2011
: https://drupal.stackexchange.com/questions/1715/what-would-be-the-optimal-mysql-configuration-for-a-drupal-7-site/2367#2367Caching Basis Data
Argumen kuat lainnya untuk mengonversi semua data MyISAM ke InnoDB adalah bagaimana MySQL menyimpan data / indeks. Mesin Penyimpanan MyISAM hanya menyimpan cache indeks. InnoDB menyimpan data dan indeks cache . Sehubungan dengan ini, Anda dapat mengalokasikan memori yang cukup untuk Pool Buffer InnoDB untuk mengakomodasi salah satu dari yang berikut ini (mana yang lebih kecil)
Jika Anda menggunakan MySQL 5.1, Anda dapat mengatur innodb_max_dirty_pages_pct = 0. Ini akan sedikit meningkatkan I / O disk, tetapi Pool Buffer InnoDB akan dihapus cukup untuk memungkinkan data lama dan halaman indeks untuk berputar tanpa lonjakan disk I / O. Plugin MySQL 5.5 dan InnoDB MySQL 5.1 tidak memerlukan penyesuaian ini karena memiliki mekanisme penyiraman Buffer Pool default yang lebih baik.
Jika menggunakan InnoDB keluar dari pertanyaan, Anda mungkin harus menggunakan memcached atau varnish. Hal ini memungkinkan pengembang untuk menentukan berapa lama data yang di-cache akan berada di RAM server. Secara alami, ini akan membutuhkan peningkatan pengembangan untuk membuat aplikasi Anda memcached / varnish-aware.
Mengunci Meja
Epilog
Anda tidak dapat menghindari penundaan awal setelah Restart MySQL. Namun, begitu Anda meningkatkan MySQL menggunakan saran / informasi yang disebutkan di atas, Anda seharusnya tidak lagi mengalami penundaan berikutnya.
sumber
Saya akan menggunakan alat-alat seperti YSlow atau Firebug dll untuk menentukan dengan tepat apa yang terjadi ketika Anda memuat halaman tersebut dan kapan Anda memuat halaman tersebut segera setelahnya. Periksa apakah ini masalah caching dan lebih jauh lagi, periksa bagaimana fungsinya saat Anda mengakses halaman sebagai pengguna anonim dan kemudian sebagai pengguna yang diautentikasi. Bandingkan ini dengan pengaturan kinerja Anda dalam Drupal.
Jika ini bukan masalah caching, maka gunakan log kueri Devel dan juga log MySQL untuk melihat apa yang terjadi di database. Selain itu, jika Anda memiliki opcode atau cache peningkatan kinerja serupa di server, coba nonaktifkan beberapa nomor lalu nyalakan kembali.
sumber
Kedengarannya seperti cron sedang berjalan.
Periksa pengaturan Anda di sini: admin / config / system / cron
sumber
Saya hampir menjatuhkan Drupal untuk proyek terakhir saya karena ini.
Harus ada saya lebih dari satu sebab. Saya belum menemukan solusi 'memperbaiki semua' yang berfungsi setiap kali masalah ini merayap.
Syslog dan Ubuntu / Debain
Pertama kali saya berlari melintasi waktu muat 15 detik yang terputus-putus adalah saat menjalankan drupal pada sistem berbasis Debian / Ubuntu (Dedicated, non-shared). Menonaktifkan modul Syslog adalah solusi bagi saya.
Seperti yang dikatakan @BetaRide, menggunakan xDebug atau profiler PHP lainnya sangat mencerahkan.
Still A Problem - A Workaround
Adapun instalasi saya yang lain, saya masih bingung.
Masalah ini lebih terlihat pada server pengembangan saya dan Drupal lalu lintas rendah saya menginstal.
Sebagai solusi, saya telah menyiapkan tugas cron untuk memuat halaman beranda situs setiap 60 detik serta skrip cron Drupal setiap 300 detik. Ini jelas tidak optimal, tetapi saya lebih suka wget atau curl mengalami waktu memuat 15 detik daripada pengunjung manusia.
sumber
Banyak orang menyarankan masalah ini bisa terkait dengan memblokir proses latar belakang sinkron , terutama yang terkait dengan pekerjaan cron berat .
Jika benar, ada sepasang modul dalam pengembangan aktif oleh gielfeldt * yang mungkin memotong masalah ini, atau setidaknya, dapat menawarkan beberapa petunjuk dan membantu pembangun situs mendiagnosis dan menangani penyebab spesifik dalam kasus mereka. Keduanya menggantikan pemblokiran proses sinkron dengan HTTP atau perintah asinkron non-pemblokiran, dan keduanya menawarkan laporan yang relevan yang dapat mengidentifikasi proses yang menyusahkan:
Keduanya adalah modul yang sangat berguna; untuk masalah ini, mereka dapat digunakan untuk menguji teori (terdengar sangat masuk akal) bahwa penyumbatan disebabkan oleh proses blocking sinkron atau cron run. Secara potensial, mereka dapat memecahkan masalah dengan menjalankan ini secara tidak sinkron dan bukan secara sinkron, dan mereka juga bisa berpotensi memberikan petunjuk tentang proses spesifik yang menyebabkan penahanan. (diperingatkan bahwa dokumentasi mereka adalah pekerjaan yang sedang berjalan ...
Namun, jika mereka tidak dapat dikonfigurasi untuk membantu sama sekali, itu menunjukkan ada lebih banyak masalah daripada hanya proses latar belakang yang sinkron. FWIW, saya belum pernah mengalami masalah khusus ini di sebuah situs sejak membuat modul-modul ini bekerja dengan baik (belum - menyentuh kayu) - tetapi saya telah melihatnya di situs saya sebelumnya, serta di situs Drupal langsung di alam.
Perhatikan juga modul plug-in terkait lainnya yang saat ini dalam pengembangan - misalnya dalam kasus intensitas tinggi yang kompleks, Ultimate Cron Queue Scaler , yang memungkinkan pelambatan berbasis ambang batas, dapat membantu mengurangi masalah kinerja terkait-cron.
* tidak ada afiliasi, saya hanya pengguna yang sangat terkesan dengan pekerjaan mereka
sumber
Karena ini memukul saya sekali lagi saya mulai lakukan menyelidiki masalah. Saya pasti bisa mengkonfirmasi itu
drupal_cron_run()
dipicu oleh cron of core Poorman menambahkan ~ 5s ke waktu permintaan di mesin dev saya. Ini dapat diuji dengan uncommenting tes sekitar panggilan untukdrupal_cron_run()
dimodules/system/system.module
dalamsystem_run_automated_cron()
drush cc all
dan memuat kembali halaman tersebut.Ini berarti bahwa mengatur cron untuk tidak pernah dan menambahkan panggilan ke cron melalui crontab membuat situasinya jauh lebih baik. Menekan beberapa halaman yang sering digunakan tepat setelahnya untuk mengisi ulang cache akan meningkatkan pengalaman pengguna.
Saya tidak yakin tentang caching. Saya belum menyentuh pengaturan cache default untuk situs ini. Saya pikir drupal sedang membangun kembali semua cache dari waktu ke waktu mungkin dipicu oleh cron, tapi saya tidak yakin bagaimana ini dilakukan. Tapi penundaan 7s cukup banyak apa yang saya lihat ketika saya menekan halaman setelah beberapa jam.
sumber
Masalah seperti ini dapat membuat Anda gila dan ketika saya berada dalam situasi yang sama membantu untuk mencari tahu apa yang menyebabkan masalah terjadi satu langkah pada saat itu dan kemudian mengujinya sebagai pengguna anonim dan login. (metode lapisan bawang merah)
Anda menyebutkan bahwa Anda mulai memperhatikan masalah setelah bermain dengan beberapa tema dan membuat kode sendiri. Saya tidak tahu seberapa rumit situs Anda atau logika di baliknya, tetapi langkah-langkah berikut akan membantu Anda menemukan masalah:
Di server Anda buat folder atau akun lain (ini mungkin lebih baik) di mana Anda akan melakukan instalasi Drupal bersih dengan versi yang sama yang Anda gunakan di situs Anda. Kemudian tanpa menambahkan modul atau tes tema apa pun, waktu yang dibutuhkan situs untuk menanggapi permintaan pertama dan permintaan berikut. Jika semua berfungsi dengan baik, Anda dapat mengabaikan masalah konfigurasi server, jika berperilaku sama seperti Anda saat ini, Anda memiliki kesalahan konfigurasi baik dengan server web atau database Anda.
Jika hasil dari langkah 1 baik dan server merespons dengan cepat dan permintaan berikut sama cepatnya, maka instal hanya tema dari situs Anda saat ini ke situs instal bersih dan uji lagi. Jika semuanya masih merespon dengan cepat, maka tema Anda bukan masalah dan Anda harus melanjutkan ke langkah 3 jika tidak, Anda harus mulai men-debug tema Anda * 1.
Jika setelah pengujian pada langkah 2 situs masih mulai dengan cepat membawa modul-modul di situs Anda saat ini dan pastikan untuk menguji waktu respons setelah menambahkan dan mengaktifkan setiap modul * 2.
Jika setelah menambahkan tema dan modul situs masih merespons dengan cepat, mulailah menambahkan konfigurasi, buat jenis konten, impor tampilan, menu pengaturan, dll. Jangan lupa untuk menguji respon situs setelah menambahkan masing-masing.
Pengaturan dan konfigurasi siap dan situs masih cepat, nah sekarang bawa data selesai. Mengimpor node, istilah taksonomi, komentar, dll. Saya tahu saya harus terdengar seperti rekaman yang rusak, tetapi selalu menguji setelah menyelesaikan setiap langkah.
* 1 Menguji tema: proses ini bisa rumit dalam tema yang sangat rumit, berikut adalah beberapa petunjuk:
Jika Anda menautkan ke pustaka js atau css eksternal, coba gunakan salinan lokal yang sama.
Dalam file template.php Anda periksa fungsi yang mungkin memiliki loop lebih panjang atau tanpa akhir serta fungsi preproses dan / atau fungsi tema kait.
Periksa file templat lain (halaman.tpl.php, dll) dan cari pemrosesan PHP mentah dari array dan objek.
Jika menggunakan "Tampilan" dan melihat file templat, maka periksa juga.
Selalu periksa jalur, optimalkan gambar, file js dan css. Terkadang file js dapat memiliki ketinggian yang tinggi ketika menggunakan beberapa cuplikan kode dalam satu file.
* 2 Modul pengujian : modul pengujian sedikit berbeda karena penggunaan manipulasi berat dengan PHP diperbolehkan. Berikut ini beberapa petunjuknya:
Modul yang didukung komunitas (CCK, Views, dll) memiliki masalah antrian di drupal.org periksa untuk melihat apakah ada masalah yang ada tentang masalah Anda dan jika ada kemungkinan ada patch untuk memperbaikinya.
Modul kode kustom sendiri, baik jika Anda memberi kode Anda harus memperbaikinya, kan ?. Periksa kembali pengkodean Anda dan periksa penggunaan fungsi terhadap api.drupal.org, Anda mungkin menggunakan fungsi yang berlebihan alih-alih kail.
Modul kode khusus Internet yang dibagikan, lakukan seperti pada langkah 2, tetapi kali ini Anda juga dapat menghubungi penulis modul asli dan memberi tahu dia tentang masalahnya.
Jika situs Anda merupakan pemutakhiran (D5 -> D6 -> D7) periksa skrip migrasi atau pemutakhiran (biasanya dalam file module.install), Anda mungkin memerlukan "indeks" tambahan pada konfigurasi tabel baru untuk membuat kueri SQL lambat X lebih cepat .
Jika Anda merasa memiliki visi terowongan tentang masalah tersebut, keluar sebentar dan lakukan beberapa aktivitas lain yang sama sekali tidak terkait dan kemudian kembali lagi nanti untuk meninjau kembali masalah tersebut.
Jika Anda melakukan ping poin masalah pada bagian kode, tetapi tidak bisa membuat kepala atau ekor tentang bagaimana memperbaikinya, coba jelaskan apa bagian itu harus dilakukan untuk orang yang tidak tahu bagaimana memprogram atau bagaimana Drupal bekerja dan menjadi siap menjadi kejutan.
Catatan: Jangan khawatir jika setelah membangun kembali situs Anda semua mulai berfungsi seperti pesona yang merupakan salah satu fitur terbaik yang dimiliki komputer.
sumber
Periksa kembali apakah Anda belum menghapus modul apa pun tanpa menghapus instalannya. Ini menyebabkan penundaan karena Drupal mencoba menemukan file tetapi mereka tidak ada lagi.
Hapus referensi dalam tabel variabel jika modul tidak ada lagi.
sumber
APM Web seperti newrelic adalah alat terbaik untuk melacak masalah kinerja. Saya memiliki situs yang memanggil satu atau dua baris kode yang melakukan hal-hal yang tidak penting, memuat array yang tidak perlu pada waktu yang aneh, dan melakukan hal-hal lain yang cukup tidak terlihat sampai kami melacaknya dengan APM.
sumber
Seseorang menyebutkan bahwa GoDaddy akan lambat. Banyak perusahaan hosting berbasis cloud juga akan mengalami keterlambatan awal ini karena layanan seperti AWS memilikinya. Lebih murah untuk membuat server diprioritaskan secara otomatis, dan server tersebut akan membutuhkan satu atau dua detik untuk 'bangun'.
Misalnya, Pagodabox memiliki 3-4 detik untuk byte pertama, sampai server bahagia. Pagodabox sebenarnya menghasilkan uang agar server tetap terjaga, sehingga Anda dapat membayar ekstra untuk 'membuat' situs Anda.
Juga, CDN dapat membantu Anda. Web / db Anda tidak akan dimuat dengan menyajikan halaman atau gambar yang di-cache. Tutorial yang bagus di sini: http://wimleers.com/article/easy-drupal-cdn-integration-for-fun-and-profit
Dan ... WebPageTest membuat saya bahagia. http://www.webpagetest.org/ Bandingkan waktu muat di seluruh planet ini dan dengan browser web yang berbeda secara gratis. Gunakan ini untuk mendapatkan hasil dunia nyata untuk perubahan apa pun yang Anda buat.
sumber
masalahnya bisa dimana saja.
query log
danpage timer
opsi diadmin/config/development/devel
. Lihat yang mana dari keduanya yang membutuhkan lebih banyak waktu untuk menghasilkan seluruh halaman.sumber
Jadi ini adalah bagaimana saya memperbaiki masalah untuk instalasi saya. Ini bukan solusi nyata karena saya tidak bisa menemukan sumber masalah yang sebenarnya (jika ada), tetapi ini adalah solusi yang baik
1) Agregat CSS (pengaturan cache). Ini mengurangi latensi hingga setengahnya
2) Setel cron untuk tidak pernah (dan jalankan secara eksternal) - Catatan: Saya telah "mencoba untuk memulai cron saat ini sudah berjalan" kesalahan. Saya pikir itu mencoba untuk memulai cron di setiap peluncuran tetapi karena gagal, halaman cron tidak menyebutkan upaya terbaru, melainkan keberhasilan terbaru.
3) Mengatur pekerjaan cron yang memanggil halaman beranda dengan Lynx setiap 30 menit
Semua ini di server hosting bersama. Itu tidak optimal tetapi berhasil
sumber
Saya sarankan menggunakan cache front-end di sepanjang baris modul Boost (dengan asumsi Anda menggunakan shared hosting) atau Varnish. Ini akan berfungsi dengan baik jika akses situs Anda sebagian besar anonim dan sebagian besar konten halaman bersifat non-dinamis (yaitu halaman tidak banyak berubah).
Solusi ini menyimpan halaman yang diberikan pada akses pertama dan kemudian melayani html yang telah dirender sebelumnya alih-alih melalui bootstrap Drupal penuh, pembuatan halaman, dan proses bertema, menghemat BANYAK waktu, terutama di situs yang sibuk tetapi juga di situs seperti Anda gambarkan "tidur" mana dan butuh waktu terlalu lama untuk bangun.
Satu-satunya kelemahan nyata adalah bahwa (setidaknya untuk Peningkatan) Anda harus menghapus cache ketika konten situs berubah. Jika Anda ingin memastikan situs ini sepenuhnya di-cache dengan konten saat ini, Anda dapat menjalankan drush cc all lalu meringkuk atau menempelkan situs lengkap secara berkala melalui cron.
sumber