Εδώ και αρκετό καιρό αντιμετωπίζω ένα πρόβλημα για το οποίο δεν έχω βρει ακόμη οριστική λύση.
Το πρόβλημα είναι ότι, αμέσως μετά τη δημοσίευση μιας ανάρτησης, η κατανάλωση της CPU εκτοξεύεται στα ύψη, όπως και ο αριθμός των διεργασιών, με αποτέλεσμα ο ιστότοπος να μην είναι πρακτικά προσβάσιμος για μεγάλα χρονικά διαστήματα.
Αυτό είναι ένα σοβαρό πρόβλημα, καθώς οι συνδρομητές θα λαμβάνουν μια ειδοποίηση για μια νέα δημοσίευση, την οποία δεν θα μπορούν να διαβάσουν επειδή η σελίδα δεν επιλύεται, για να μην αναφέρουμε τι σημαίνει για την τοποθέτηση η συχνή διακοπή της σελίδας.
Μετά από κάποιο χρονικό διάστημα, το σύστημα θα τερματίσει τελικά τις διεργασίες, αλλά μπορεί να χρειαστούν ώρες για να συμβεί αυτό.
Εάν χρησιμοποιείτε το cPanel, συνήθως θα λάβετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με ένα μήνυμα όπως αυτό:
(Cron Daemon)
/bin/sh: line 1: 30255 Killed /usr/local/bin/php /home/user/public_html/wp-cron.php >> /home/user/public_html/wp-cron.log 2>&1
Έχοντας ενεργοποιημένο το DISABLE_WP_CRON
στο wp-config.php
, εξακολουθώντας να λαμβάνω το μήνυμα "Killed" από το cPanel, σημαίνει ότι υπάρχει κάποια άλλη διαδικασία ή διαμόρφωση (που δεν έχω ανακαλύψει ακόμα) που προσπαθεί να εκτελέσει το wp-cron.php
και το σύστημα το τερματίζει λόγω υπερκατανάλωσης πόρων (μνήμη, CPU κ.λπ.).
Σήμερα ερεύνησα λίγο περισσότερο και παρακολούθησα την κατανάλωση της CPU. Για το σκοπό αυτό, χρησιμοποίησα το τερματικό στο πρόγραμμα περιήγησης για πρόσβαση SSH και WP-CLI που προσφέρει η LucusHost στο cPanel.
Εάν η φιλοξενία σας το επιτρέπει, για να αποκτήσετε πρόσβαση πρέπει να μεταβείτε στο Advanced/Terminal στο cPanel. Εάν τα αρχεία του ιστολογίου σας βρίσκονται στο φάκελο public_html, πρέπει να έχετε πρόσβαση ως εξής:
cd public_html
Στη συνέχεια, για να δείτε τις διεργασίες που εκτελούνται, πληκτρολογήστε
top
Και θα πρέπει να δείτε κάτι τέτοιο:

Στην περίπτωσή μου βρίσκω μια χιονοστιβάδα διεργασιών lsphp που καταναλώνουν εντελώς την CPU.
Αρκεί να ανοίξετε την περιοχή διαχείρισης του WordPress για να δείτε τέσσερις ή πέντε διεργασίες LiteSpeed(lsphp) που κλείνουν μετά από μερικά δευτερόλεπτα. Αυτό είναι φυσιολογικό, οι διεργασίες lsphp της LiteSpeed αποτελούν μέρος της αρχιτεκτονικής της για την αποτελεσματική διαχείριση των συνδέσεων PHP.
Ωστόσο, κάτι δεν πάει καλά όταν, μετά τη δημοσίευση μιας νέας ανάρτησης (μερικές φορές αρκεί μόνο η επεξεργασία μιας ήδη δημοσιευμένης), οι διεργασίες αυτές ενεργοποιούνται τόσο σε αριθμό όσο και σε χρήση CPU και δεν απελευθερώνονται, αφήνοντας τον ιστότοπο νεκρό.
Το πρώτο μέτρο έκτακτης ανάγκης για να ξεμπλοκάρετε τη σελίδα είναι να τερματίσετε αυτές τις "κολλημένες" διεργασίες, το οποίο δεν λύνει το πρόβλημα που προκαλεί το μπλοκάρισμα, αλλά ανακτάτε την πρόσβαση στον ιστότοπο.
pkill -u TuNombreDeUsuario lsphp
Αν προτιμάτε, μπορείτε να τερματίσετε μια συγκεκριμένη διεργασία χρησιμοποιώντας το PID της, αν και αυτό μάλλον δεν θα σας ωφελήσει ιδιαίτερα, καθώς πολλές διεργασίες κλείνουν και ανοίγουν σε μικρά χρονικά διαστήματα.
# Detiene procesos con alto %CPU (ejemplo para detener el PID 7026)
kill -9 7026
Κανονικά, από προεπιλογή, το LiteSpeed εκτελεί αυτές τις τέσσερις εργασίες κάθε λεπτό, ανάλογα με τη διαμόρφωση του πρόσθετου σας και τις επιλογές που χρησιμοποιείτε.
litespeed_task_imgoptm_pull
litespeed_task_ccss
litespeed_task_ucss
litespeed_task_lqip
Οι δύο πρώτες, imgoptm_pull
και ccss
, είναι βαριές εργασίες που μερικές φορές προκαλούν timeouts (ειδικά σε shared hosting), ενώ οι ucss και lqip είναι ελαφρύτερες εργασίες.
Έτσι, το πρώτο πράγμα που δοκίμασα είναι να μπλοκάρω την αυτόματη αναγέννηση του LiteSpeed απενεργοποιώντας την αυτόματη διαχείριση Cron στο LiteSpeed, για αυτό πρόσθεσα αυτό στο wp-config.php
// Deshabilita la gestión automática de Cron en LiteSpeed
define('LITESPEED_DISABLE_CACHE_PURGE_CRON', true);
define('LITESPEED_DISABLE_AUTOUPDATE_CRON', true);
Στη συνέχεια, με την ακόλουθη συνάρτηση που προστίθεται στο functions.php επιβάλλετε την κατάργηση του διαστήματος του 1 λεπτού και το αλλάζετε σε 1 φορά την ημέρα κατανέμοντας αυτές τις εργασίες σε διαφορετικές χρονικές στιγμές για να αποφύγετε την υπερβολική κατανάλωση CPU. Ανάλογα με την επισκεψιμότητα του ιστολογίου σας, μπορείτε να ορίσετε αυτές τις ώρες σε διαφορετικές ώρες το πρωί, για παράδειγμα.
/**
* Cambia la frecuencia de las tareas de LiteSpeed Cache de "cada minuto" a "una vez al día" a distintas horas".
*/
add_action('init', function() {
// Eliminar el intervalo "litespeed_filter"
add_filter('cron_schedules', function($schedules) {
if (isset($schedules['litespeed_filter'])) {
unset($schedules['litespeed_filter']);
}
return $schedules;
}, 9999);
// Reprogramar tareas con timestamps únicos
$tasks = array(
'litespeed_task_imgoptm_pull' => strtotime('tomorrow 00:30'),
'litespeed_task_ccss' => strtotime('today 20:00'),
'litespeed_task_ucss' => strtotime('tomorrow 00:00'),
'litespeed_task_lqip' => strtotime('tomorrow 04:00')
);
foreach ($tasks as $hook => $time) {
if (wp_next_scheduled($hook)) {
wp_unschedule_event(wp_next_scheduled($hook), $hook);
}
wp_schedule_event($time, 'daily', $hook);
}
}, 9999);
Μόλις εφαρμοστούν αυτές οι αλλαγές, ελέγξτε ότι λειτουργούν, σύμφωνα με το πρόσθετο Advanced Database Cleaner Pro, οι αλλαγές αυτές εφαρμόζονται. Μπορείτε επίσης να ελέγξετε με το Wp Crontrol.

Υποθέτοντας ότι δεν χρησιμοποιείτε το εγγενές εικονικό CRON του WordPress, για να ελαφρύνετε περαιτέρω την κατανάλωση της CPU προστίθεται ένα νέο CRON που αυξάνει τη συχνότητα στα 30 λεπτά, αποφεύγει τα διπλότυπα με το flok και μειώνει το φορτίο του διακομιστή.
*/30 * * * * /usr/bin/flock -xn /tmp/wp-cron.lock /usr/local/bin/php /home/TuNombreDeUsuario/public_html/wp-cron.php > /dev/null 2>&1
Τώρα, όταν εκτελούμε τη λίστα χρονοδιαγράμματος wp cron, διαπιστώνουμε ότι το φίλτρο litespeed_filter , ή οποιοδήποτε άλλο φίλτρο, δεν εκτελείται κάθε 60 δευτερόλεπτα.

Αυτή είναι απλώς μια πρώτη προσέγγιση. Τώρα πρέπει να συνεχίσω να δοκιμάζω και να παρακολουθώ τη χρήση των πόρων σε διαφορετικά σενάρια. Τουλάχιστον, προς το παρόν, δεν έχω δει τη σελίδα να καταρρέει ξανά κατά τη δημοσίευση μιας νέας ανάρτησης.
Αν κάποιος έχει το ίδιο πρόβλημα και έχει βρει μια οριστική λύση, θα εκτιμούσα μια συμβουλή.