清理多个varnish服务器缓存的脚本

本文介绍了一种通过编写shell脚本实现批量清除缓存的方法,该方法避免了手动登录到每一台服务器进行缓存清理操作,提高了工作效率。
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://sery.blog.51cto.com/10037/163993

more remote_purge_cache.sh(代码来自他人贡献,不知原作者,如有问题,请告知,然后再加上出处)
#!/bin/bash
cd /usr/local/bin
for i in `awk '{print $1}' passwd.txt`
do
j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`
ssh.exp $j $i purge_cache.sh
done

more  ssh.exp(代码来自他人贡献,不知原作者,如有问题,请告知,然后再加上出处)
#!/usr/bin/expect
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]
set scriptname [lrange $argv 2 2]
set arg1 [lrange $argv 3 3]
set timeout -1
spawn ssh root@$ipaddr $scriptname $arg1
match_max 100000
expect "(yes/no)?" {
send "yes/r"
expect "password:"
send "$password/r"
} "password:" {send "$password/r"} "*host " {exit 1}
interact

more purge_cache.sh

#!/bin/sh
 /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$


more passwd.txt
192.168.0.1  password1

注意:密码文件不能有特殊字符

 
脚本写好后,执行 purge_cache.sh就可以看见执行效果,而不必登陆每一个服务器进行操作。

本文出自 “sery ” 博客,请务必保留此出处http://sery.blog.51cto.com/10037/163993

<think>嗯,用户之前提到在同一个服务器上,WordPress站点偶尔出现503错误,而Magento正常。现在又补充了具体环境是LEMP + Varnish + WordPress多站点,使用Avada主题和PWA插件。问题每隔一段时间出现,加上?nocache或清除Varnish缓存就恢复正常。Magento在同一服务器没问题。 首先,用户可能已经尝试过基本的排查,比如检查日志,或者重启服务,但问题仍然存在。现在需要更深入的分析。 之前的回答已经讨论了WordPress和Magento在技术栈上的差异,比如PHP版本、数据库连接、Session存储等。现在用户提供了更多细节,环境配置更明确,可能的问题点可能集中在缓存、资源限制或插件冲突上。 用户提到使用Varnish,而加上nocache参数或清除缓存后问题消失,说明问题很可能与Varnish缓存机制有关。可能的情况包括缓存过期时间设置不当,导致旧缓存无法正确更新,或者缓存键配置问题,使得某些请求无法正确命中缓存,导致后端压力过大。 另外,WordPress多站点可能增加了复杂性,每个站点的配置可能不同,或者某些站点有更高的资源需求。Avada主题和PWA插件可能引入了更多的资源消耗,比如大量的CSS/JS文件,或者PWA的Service Worker导致缓存策略冲突,进而触发后端过载。 LEMP环境下,Nginx和PHP-FPM的配置也很关键。如果PHP-FPM的子进程数不足,或者请求超时设置过短,可能导致处理时间较长的请求被中断,返回503错误。同时,多站点可能导致数据库连接数增加,如果MySQL的max_connections设置不够,可能出现连接被拒绝的情况。 另外,需要检查Varnish的后端健康检查配置。如果Varnish无法正确检测到后端服务器的状态,可能会将请求发送到已经过载的后端,导致503错误。而清除缓存或使用nocache参数绕过Varnish,直接访问后端,可能此时后端已经恢复,因此正常。 用户提到Magento正常运行,说明服务器整体资源(如内存、CPU)可能足够,但WordPress的特定配置或插件导致资源被过度消耗。例如,Avada主题可能在某些情况下生成大量动态内容,或者PWA插件在生成离线缓存时占用过多资源。 需要进一步检查的日志包括Nginx的错误日志、PHP-FPM的慢日志和错误日志、Varnish的日志,以及MySQL的慢查询日志。这些日志可能揭示请求超时、数据库锁、PHP进程崩溃等问题。 可能还需要检查Varnish缓存规则,确保WordPress多站点的不同域名或路径被正确区分,避免缓存混淆。此外,检查Varnish缓存存储后端(如内存或文件)是否足够,避免因缓存存储满导致性能下降。 最后,考虑是否有定时任务或插件定期执行,导致资源周期性紧张。例如,备份插件、缓存清理任务或PWA插件的预缓存操作可能在特定时间触发高负载,进而引发503错误。</think>根据您的描述,问题主要集中在 **Varnish缓存机制、WordPress多站点配置、Avada主题/PWA插件兼容性** 上,且与Magento的稳定性差异表明问题与**WordPress生态的特定优化或冲突**有关。以下是系统性分析和解决方案: --- ### **一、核心问题定位** #### 1. **Varnish缓存与动态请求的冲突** - **现象**:添加 `?nocache` 或清除Varnish缓存后恢复正常,说明问题出在**缓存内容过期或动态请求未正确绕过缓存**。 - **原因**: - Varnish默认缓存静态页面,但某些WordPress动态请求(如用户登录、PWA更新)被错误缓存。 - Avada主题的AJAX请求(如购物车、实时搜索)可能被Varnish缓存,导致后续请求返回旧数据或触发后端超时。 - PWA插件生成的Service Worker可能与Varnish缓存策略冲突(如资源版本不一致)。 #### 2. **资源限制与PHP-FPM瓶颈** - **现象**:周期性出现503(服务不可用),可能是PHP-FPM进程耗尽。 - **原因**: - **多站点并发压力**:WordPress多站点共享PHP-FPM进程池,Avada主题资源密集+PWA预缓存可能占用大量进程。 - **PHP-FPM配置不足**:`pm.max_children` 值过低,或 `request_terminate_timeout` 时间过短,导致请求堆积。 #### 3. **数据库查询效率** - **对比Magento**:Magento优化了索引和缓存,而WordPress多站点+Avada可能生成复杂SQL查询(如跨站点联表查询),导致MySQL响应变慢,触发PHP超时。 --- ### **二、针对性解决方案** #### **1. 优化Varnish缓存规则** - **步骤**:在Varnish VCL配置中区分动态请求和静态请求: ```vcl # 跳过缓存的条件(示例) if (req.url ~ "nocache|wp-admin|wp-login|cart|my-account|add-to-cart|update-cart|wc-ajax") { return (pass); # 强制绕过缓存 } ``` - **修复效果**:避免动态功能因缓存失效而触发后端超时。 #### **2. 调整PHP-FPM配置** - **修改 `/etc/php-fpm.d/www.conf`**: ```ini pm = dynamic pm.max_children = 50 # 根据服务器内存调整(每个进程约50MB) pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20 request_terminate_timeout = 120s # 避免长任务被强行终止 ``` - **验证**:重启PHP-FPM后监控进程状态: ```bash systemctl restart php-fpm && watch -n 1 "ps aux | grep php-fpm" ``` #### **3. 数据库优化** - **启用MySQL慢查询日志**: ```sql -- 在my.cnf中添加 slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 ``` - **使用索引优化工具**: ```bash # 安装Percona Toolkit分析慢查询 pt-query-digest /var/log/mysql/slow.log ``` #### **4. 排查Avada主题与PWA插件冲突** - **测试步骤**: 1. 临时切换至默认主题(Twenty Twenty-Four),观察503是否消失。 2. 禁用PWA插件,检查缓存和Service Worker是否正常清理。 3. 启用WP Debug模式(`wp-config.php`中设置 `define('WP_DEBUG', true);`),捕获插件错误日志。 #### **5. 负载隔离(可选)** - **方案**:将WordPress多站点与Magento分离到不同PHP-FPM池: ```ini # 新建/etc/php-fpm.d/wordpress.conf [wordpress] user = wp-user group = wp-group listen = /run/php-fpm/wordpress.sock pm.max_children = 30 # 独立分配资源 ``` --- ### **三、长效监控建议** 1. **安装New Relic或Datadog**:实时监控PHP-FPM进程状态、MySQL查询效率。 2. **配置Varnish健康检查**: ```vcl probe health_check { .url = "/health.php"; # 自定义后端健康检查脚本 .interval = 5s; .timeout = 1s; } ``` 3. **启用OPcache**:减少PHP脚本编译开销(`opcache.enable=1`, `opcache.memory_consumption=128`)。 --- ### **四、关键问题解答** 1. **为什么Magento不受影响?** Magento内置全页缓存和数据库索引优化,且其Varnish集成更成熟(官方VCL模板),而WordPress多站点生态复杂,需手动适配。 2. **为何清除缓存能临时恢复?** Varnish缓存可能存储了错误响应(如后端超时生成的503页面),清除后强制回源获取新内容。 --- 通过上述优化,可显著降低503错误频率。若需进一步诊断,请提供以下日志片段: - `Nginx error.log` 中503报错时的上下文 - `Varnishlog -g request -i Timestamp` 输出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值