GNU/Linux >> Belajar Linux >  >> Linux

Pekerjaan cron pengumpulan sampah Ubuntu untuk sesi PHP membutuhkan waktu 25 menit untuk dijalankan, mengapa?

Solusi 1:

Selamat atas memiliki situs web yang populer dan mengatur agar tetap berjalan di mesin virtual selama ini.

Jika Anda benar-benar menarik dua juta tampilan halaman per hari, maka Anda akan menumpuk BANYAK sesi PHP di sistem file, dan akan membutuhkan waktu lama untuk menghapusnya tidak peduli apakah Anda menggunakan fuser atau rm atau penyedot debu.

Pada titik ini saya sarankan Anda mencari cara alternatif untuk menyimpan sesi Anda:

  • Satu opsi adalah menyimpan sesi di memcached . Ini secepat kilat, tetapi jika server mogok atau dimulai ulang, semua sesi Anda hilang dan semua orang keluar.
  • Anda juga dapat menyimpan sesi dalam database. Ini akan menjadi sedikit lebih lambat daripada memcache, tetapi database akan tetap ada, dan Anda dapat menghapus sesi lama dengan kueri SQL sederhana. Namun, untuk mengimplementasikannya, Anda harus menulis pengendali sesi khusus.

Solusi 2:

Menghapus fuser harus membantu. Pekerjaan ini menjalankan fuser perintah (periksa apakah file sedang dibuka) untuk setiap file sesi yang ditemukan, yang dapat dengan mudah memakan waktu beberapa menit pada sistem yang sibuk dengan sesi 14k. Ini adalah bug Debian (Ubuntu didasarkan pada Debian).

Alih-alih memcache, Anda juga dapat mencoba menggunakan tmpfs (sistem file dalam memori) untuk file sesi. Seperti memcache, ini akan membatalkan sesi saat reboot (ini dapat diselesaikan dengan mencadangkan direktori ini di suatu tempat di skrip shutdown dan memulihkan di skrip startup), tetapi akan lebih mudah untuk diatur. Tapi itu tidak akan membantu dengan fuser masalah.

Solusi 3:

Jadi, opsi penyimpanan sesi Memcached dan basis data yang disarankan oleh pengguna di sini adalah pilihan yang baik untuk meningkatkan kinerja, masing-masing dengan kelebihan dan kekurangannya sendiri.

Tetapi dengan pengujian kinerja, saya menemukan bahwa biaya kinerja yang sangat besar dari pemeliharaan sesi ini hampir seluruhnya disebabkan oleh panggilan ke fuser dalam tugas cron. Berikut grafik kinerja setelah kembali ke tugas cron Natty / Oneiric yang menggunakan rm bukannya fuser untuk memangkas sesi lama, peralihan terjadi pada pukul 2:30.

Anda dapat melihat bahwa penurunan kinerja berkala yang disebabkan oleh pembersihan sesi PHP Ubuntu hampir seluruhnya dihapus. Lonjakan yang ditampilkan dalam grafik Operasi Disk sekarang jauh lebih kecil, dan hampir sekecil yang dapat diukur oleh grafik ini, menunjukkan gangguan kecil dan singkat di mana sebelumnya kinerja server menurun secara signifikan selama 25 menit. Penggunaan CPU ekstra sepenuhnya dihilangkan, ini sekarang menjadi pekerjaan yang terikat IO.

(tugas IO yang tidak terkait berjalan pada pukul 05:00 dan tugas CPU berjalan pada pukul 7:40 yang keduanya menyebabkan lonjakannya sendiri pada grafik ini)

Pekerjaan cron yang dimodifikasi yang saya jalankan sekarang adalah:

09 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && \
   [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 \
   -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 \
   | xargs -n 200 -r -0 rm

Linux
  1. Instal IMAP untuk PHP 7.1 di sistem operasi Ubuntu

  2. Linux:Jalankan tugas cron di latar depan

  3. Bagaimana cara mengatur pekerjaan CRON agar berjalan setiap 10 detik di Linux?

  1. Cron Job:Panduan Lengkap untuk Pemula 2022

  2. Jangan jalankan cron job jika sudah berjalan

  3. Bagaimana menjalankan tugas cron pada jam tertentu setiap hari?

  1. Menggunakan di untuk pekerjaan cron sekali pakai di Linux

  2. Jadwalkan Pekerjaan di Cron untuk Dijalankan Setiap Jam di Ubuntu 20.04 - Bagaimana cara menerapkannya?

  3. Cron Job Untuk Memeriksa Apakah Script Php Berjalan, Jika Tidak Maka Jalankan?