Saya bertindak sebagai sysadmin untuk beberapa server yang menyimpan situs Magento dan terkadang mereka mengisi dengan file sesi.
Saya telah diberitahu bahwa mengelola file-file ini bukan sesuatu yang dapat dilakukan dari dalam Magento dan saya menganggap penggunaan sementara mereka berarti mereka tidak dapat dimatikan begitu saja, tetapi tampaknya aneh bahwa Magento tidak memiliki cara untuk menangani penghapusan ini file?
Solusi saya adalah crontab malam hari yang melakukan sesuatu seperti ini find /path/to/magento/sessions/ -name "sess*" -type f -delete
tetapi rasanya tidak bisa dikatakan.
Apa cara terbaik untuk menangani ini?
sumber
Dengan sesi berbasis file, mereka akan dipangkas secara otomatis oleh cron pembersihan sesi PHP - sehingga file-file tersebut kemungkinan akan dihapus dalam ~ 7200 detik penciptaan. Jadi, bahkan di situs yang sibuk (30 ribu uniques per hari), biasanya hanya ada sekitar 4.000 file sesi di ./var/session - yang bahkan tidak ada artinya untuk server Linux kelas bawah.
Namun, pembersihan sebenarnya bergantung pada kerja cron - yang biasanya tidak terlihat di direktori ./var/session dari Magento. Jadi, Anda harus mengatur cron sistem baru
Periode pembersihan default untuk sesi adalah 7200 detik, yang seharusnya lebih dari cukup, meskipun Anda dapat mengubah yang di atas sesuai.
Dengan sesi Memcache, TCP / IP adalah satu-satunya overhead - yang untuk penyebaran server tunggal, akan membuatnya lebih lambat daripada berbasis file. Jadi, Anda akan menggunakan soket unix sebagai gantinya, yang menghapus overhead itu dan memberikan keamanan yang lebih baik. Tetapi meskipun begitu, sesi pelanggan Anda akan dipotong / dibatasi untuk jumlah RAM yang dapat Anda alokasikan. Sesi Magento rata-rata adalah 4Kb - sehingga Anda dapat mendukung 256 sesi aktif, per MB yang Anda alokasikan. Jadi pastikan untuk menetapkan batas yang sesuai untuk menghindari pelanggan kehilangan keranjang / sesi secara acak. Dan juga perlu diingat, daemon Memcache restart akan menghapus semua sesi yang ada (BAD!).
Dengan Redis (bukan asli, tetapi tersedia melalui ekstensi), Anda mendapatkan tingkat dukungan yang sama seperti Memcache, tetapi dengan manfaat tambahan dari kegigihan (jika Anda ingin menggunakannya). Dengan ekstensi Cm_Redis, Anda juga dapat memanfaatkan kompresi sesi. Kami telah menemukan ekstensi ini bekerja dengan sangat baik pada penerapan CE dan EE.
Dengan DB, pengaturan kadaluwarsa prune default adalah 1 minggu yang perkasa, jadi dengan ukuran toko di atas sebagai contoh (30k uniques per hari), Anda akan melihat ukuran tabel DB untuk core_cache_session sekitar 7GB - yang akan menggiling toko Anda berhenti total, untuk hampir setiap operasi berbasis sesi.
Dari pengalaman hosting toko besar (230rb pengunjung unik per hari) dan kecil (<1rb pengunjung unik per hari), rekomendasi kami adalah:
Penempatan server tunggal - file
Penempatan multi-server - Redis (menggunakan database terpisah dari cache Magento utama)
Saya menulis beberapa balasan yang sangat teliti di sini http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
sumber
Saya telah mengajukan pertanyaan terkait beberapa waktu lalu:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
Apa yang tidak pernah saya temukan (saya meninggalkan pekerjaan itu untuk yang baru, dan masalah asli menjadi milik orang lain) adalah jika sesi Magento akan menghormati pengaturan ini, atau jika mereka menerapkan penanganan sesi mereka menggunakan Zend (dan mungkin semacam zend.ini file konfigurasi).
Pengaturan php untuk melihat:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
sumber
Biasanya pekerjaan cron sudah mencukupi, tetapi berikut adalah beberapa hal yang perlu diingat:
1) Setel sesi agar tidak lebih dari
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) detik (ini akan mengatur sesi yang sudah kadaluwarsa untuk dipersiapkan untuk pengumpulan sampah oleh php.ini atau .htaccess)2) Anda mungkin ingin menyimpan sesi dalam database lihat di sini untuk info lebih lanjut tentang cara melakukan ini (opsi ini mungkin lebih mudah dikelola melalui modul magento khusus)
3) Pilihan lain untuk dipertimbangkan adalah penyihir Memcached juga dapat mempercepat server (meskipun tidak sepenuhnya terhubung ke pertanyaan, saya pikir itu berguna untuk diketahui)
Lihat pertanyaan ini untuk info lebih lanjut: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
sumber
find
semua file yang lebih tua darisess.gc_maxlifetime
dan menghapusnya. Menghapus sesi melalui cron adalah perilaku yang normal, aman dan dapat diterima.session.gc_probability
dansession.gc_divisor
. Jika skrip yang berbeda memiliki nilai yang berbeda untuk skripsession.gc_maxlifetime
dengan nilai terendah akan menentukan berapa lama barang bertahan sejak penyimpanan sesi bersifat global dan eksekusi skrip tersebut akan membersihkan objek sesi skrip lainnya.Pada semua pengaturan kami, kami memiliki file maintenance.php yang menangani pembersihan log dan direktori var sesekali. Karena sesi harus disimpan dalam database atau pada sistem file, file pemeliharaan ini akan membersihkan keduanya. (Lihat kode di bawah).
Anda dapat menjalankan perintah berikut sebagai tugas cron untuk membersihkan log:
Perintah di atas akan menghasilkan output berikut:
Anda dapat menjalankan perintah berikut sebagai tugas cron untuk membersihkan folder var:
Perintah di atas akan menghasilkan output berikut:
Kode aktual (Jangan lupa untuk menyesuaikan jalur ke file local.xml Anda):
sumber
Untuk Magento CMS dan sejenisnya (yang tidak membersihkan sesi lama), saya hanya menggunakan pekerjaan cron berdasarkan pengaturan php.ini.
PHP5 / Ubuntu 14.04 / Debian
Pengaturan cron.d sistem untuk php5 tidak membersihkan Magento ./var/session (atau apa pun selain folder sesi default (/ var / lib / php5 untuk Ubuntu dan / var / lib / php5 / sesi atau / tmp / untuk kebanyakan Linux lainnya) dists).
Tetapi Anda masih dapat menggunakan "sessionclean" dan "maxlifetime" sesuai dengan cron sistem php5 / Debian default:
Contoh Anda dapat mencoba dari baris Perintah:
Jadi masukkan saja itu ke dalam sistem / root crontab atau crontab pengguna yang memiliki izin baca / tulis untuk file sesi:
Tambahkan ini, Anda ingin tampilannya mirip dengan sistem php cron:
atau - karena kita tahu file / dir itu ada:
Sekarang saya memiliki sejumlah sesi yang dapat dikelola dan tetap bersih melalui pengumpulan sampah / masa pakai default melalui pengaturan php.ini (cli).
(Anda dapat meninggalkan wildcard di atas atau mengganti dengan sitename.)
EDIT (PHP7 / Ubuntu 16.xx / Debian):
Script 'sessionclean' telah berubah dan script maxlifetime telah dihapus. Untuk pekerjaan sistem / php cron sekarang menjadi satu skrip. Anda tidak dapat benar-benar menggunakan ini lagi karena panggilan file sekarang statis ke skrip.
Script sessionclean php5 yang lebih lama masih dapat bekerja untuk Anda jika sistem tidak membersihkan. Yang bisa Anda lakukan adalah mengambil Paket php5 Debian yang lebih lama dan mengekstraknya
sessionclean
. Atau Anda cukup menyalin ini ke area skrip Anda (memberikan izin / kepemilikan / var / www / (situs) yang tepat):Saya juga merekomendasikan untuk mengganti nama itu, jadi itu tidak bingung dengan cronjob php 'sessionclean' baru. Anda kemudian dapat memasukkan nomor "maxlifetime" sendiri seperti:
(61 menjadi contoh usia (dalam menit) dan 'MySessionClean' menjadi skrip php5 yang diganti nama diunduh atau disalin dari atas).
Dengan cara ini kami menghindari panggilan php.ini / env sepenuhnya.
(EDIT 13DEC2016: Diperbarui DEBIAN ARCHIVE REPO LINK)
sumber
Saya membersihkan DB secara teratur dari semua file sesi lama ini. Itu adalah pekerjaan manual yang menjengkelkan sampai saya menginstal Magento Optimizer yang membuat semua pekerjaan rutin ini bagi saya. Juga, cache saya di-refresh terus-menerus dan saya tidak melakukannya secara manual setelah mengubah produk dan blok statis. Oh, ya, laporan kesalahan dan gerobak terlantar juga dibersihkan.
sumber
Dari semua Komentar di atas, saya pikir ini adalah solusi yang mudah dan berharap ini lebih baik daripada skrip panjang dan menginstal ekstensi pihak ke-3 untuk mengelola file sesi lama dan menyimpan file sesi baru.
magento
folder Anda .sumber
Untuk kasus saya, saya menjalankan skrip ini ditempatkan di
magento/var/
direktori untuk menghapus file sesi lebih dari satu minggu (-mtime +7
):Ini skrip bash pertama saya (revisi 2) dan saya pikir ini dapat dioptimalkan dalam beberapa aspek. Saya terbuka untuk saran pengoptimalan apa pun.
Script ini dapat diambil di: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2
sumber
Saya membuat skrip yang mengosongkan direktori var / session. Anda dapat menambahkannya ke tugas cron untuk dijalankan sekali per hari yang seharusnya cukup dan sesuaikan sesuai kebutuhan. Anda akan melihat ketika direktori sesi Anda terisi, tidak mungkin untuk menghapus file melalui cpanel atau ssh, skrip ini akan melakukan triknya hanya menempatkan di direktori root magento.
sumber