发布帖子后,LiteSpeed 处理程序会阻止页面

 

一段时间以来,我一直在处理一个问题,但至今仍未找到确切的解决办法。

问题是,在发布文章后,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

如果在wp-config.php 中启用了DISABLE_WP_CRON,但仍然收到来自 cPanel 的"Killed"(被杀死)信息,这意味着有其他进程或配置(我还没有发现)试图运行wp-cron.php,而系统由于过度消耗资源(内存、CPU 等)而终止了它。

今天,我又进行了一些调查,并对 CPU 消耗进行了监控。为此,我使用了LucusHost在 cPanel 中提供的 SSH 和 WP-CLI 访问浏览器终端。

如果您的主机允许,您必须进入 cPanel 的高级/终端才能访问。如果博客文件在 public_html 文件夹中,则必须这样访问:

cd public_html

然后,要查看正在运行的进程,请键入

top

你应该会看到这样的内容:

发布帖子后,LiteSpeed 处理程序会阻止页面 0

在我的案例中,我发现大量的lsphp进程完全占用了 CPU。

您只需打开 WordPress 管理区,就会看到四五个 LiteSpeed 进程(lsphp)在几秒钟后关闭。这是正常现象,LiteSpeed 的 lsphp 进程是其架构的一部分,用于高效处理 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,任务繁重,有时会导致超时(尤其是在共享主机上),而ucsslqip任务较轻。

为此,我在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 进行检查。

发布帖子后,LiteSpeed 处理程序会阻止页面 1

假设您没有使用 WordPress 本地虚拟 CRON,为了进一步降低 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 秒运行一次。

发布帖子后,LiteSpeed 处理程序会阻止页面 2

这只是第一种方法。现在我必须继续测试和监控不同情况下的资源使用情况。至少,目前我还没有看到发布新帖时页面再次崩溃的情况。

如果有人遇到同样的问题并找到了确切的解决办法,请提供线索。

Suscríbete para recibir los post en tu email sin publicidad

相关文章

WordPress 6.8 中的推测加载

WordPress 6.8 中的推测加载

在 WordPress 中避免过大的 DOM 大小

在 WordPress 中避免过大的 DOM 大小

INP 已经是核心网络生命指数的一个核心指标

INP 已经是核心网络生命指数的一个核心指标

Este blog se aloja en LucusHost

LucusHost, el mejor hosting