虚拟主机限制说明,IO、并发连接上限
虚拟主机出现“704”限制提示,
通常是因为同时触发了IO读写和并发连接的上限。要解决这个问题,
你需要先定位是哪个程序占用了过高IO,
再检查并发连接数是否超过套餐限制,
最后通过调整程序配置或优化代码来降低资源消耗。 本文面向零基础用户,
以宝塔面板和常见Linux命令为例,
一步步教你排查和优化。
先搞懂:IO上限和并发连接数到底限制了什么
虚拟主机为了公平分配资源,会对每个账户设置两个硬性指标:
- IO上限:指每秒允许读写的磁盘数据量,单位通常是MB/s。超过后,磁盘操作会被强制等待或拒绝,网站表现为打开慢、后台卡顿、图片加载失败。
- 并发连接上限:指同一时刻服务器允许你占用的TCP连接数。达到上限后,新的访问请求会被拒绝,浏览器提示“连接被重置”或“服务不可用”。
这两个限制是独立计数的,任何一个超标都会触发704错误。
你可以把虚拟主机想象成合租房,IO是水龙头流量,并发连接是同时使用水龙头的人数,任何一项超了都会影响其他租客,所以服务商必须限制。
检查当前IO和并发连接的使用情况
登录宝塔面板,在左侧菜单点击“监控”,查看“磁盘IO”和“网络连接”的实时曲线。
如果IO曲线频繁冲高到套餐上限值,说明有程序在大量读写磁盘。
如果面板没有详细数据,可以用SSH登录服务器,执行以下命令查看:
# 查看当前磁盘IO(需要安装sysstat)
iostat -x 1 5
# 查看当前TCP连接数(按状态统计)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
重点关注 %util 列(磁盘使用率)和 ESTABLISHED 状态的连接数。
如果 %util 持续超过80%,或者 ESTABLISHED 接近虚拟主机套餐标注的并发上限(例如200),就需要立即优化。
降低IO占用的具体操作
1. 关闭不必要的日志和缓存写入
很多程序默认开启详细日志,每次访问都写磁盘。
以宝塔面板为例:
- 网站日志:在“网站”设置中关闭“访问日志”或降低日志级别。
- PHP慢日志:在“软件商店”->“PHP”->“配置修改”中,将
request_slowlog_timeout设为0关闭。 - MySQL慢查询日志:在“数据库”->“性能调整”中关闭慢查询日志。
2. 调整PHP-FPM进程数
PHP-FPM进程过多会导致频繁读写磁盘。
在宝塔面板“软件商店”->“PHP”->“配置修改”中,找到 pm.max_children,根据内存调整:
; 1GB内存建议设为10-20
pm.max_children = 15
; 减少进程回收频率
pm.max_requests = 500
修改后重启PHP服务。注意:进程数不是越多越好,超过内存承载会导致IO飙升。
3. 使用Redis或Memcached缓存
如果网站是WordPress等动态程序,安装Redis缓存插件,将数据库查询结果缓存到内存,能减少80%以上的磁盘读写。
在宝塔“软件商店”安装Redis,然后在网站根目录的 wp-config.php 中添加:
define('WP_CACHE', true);
控制并发连接数的有效方法
1. 限制单IP连接数
在宝塔“网站”->“配置文件”中,在 server 块内添加:
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 20;
这表示每个IP最多同时20个连接,防止单个用户占用过多并发。
2. 开启KeepAlive并合理设置超时
在Nginx配置中调整:
keepalive_timeout 30;
keepalive_requests 100;
适当延长超时时间可以减少连接重建,但设得太长会占用连接数。建议30秒左右,根据访问量调整。
3. 检查是否有爬虫或攻击
执行 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 查看连接数最多的IP。
如果某个IP连接数异常高,在宝塔“防火墙”中封禁该IP。
避坑指南:这些操作可能让限制更严重
- 不要盲目增加PHP-FPM进程数:进程越多,并发连接和IO争抢越激烈,反而更容易触发704。
- 不要关闭所有日志:保留错误日志有助于排查问题,只关闭访问日志和慢日志即可。
- 不要使用静态缓存插件同时开多个:多个缓存插件会互相冲突,导致重复读写。
- 避免在虚拟主机上运行爬虫或采集程序:这类程序会瞬间拉高IO和并发,直接被限制。
验证优化效果
完成上述调整后,按以下步骤验证:
- 在宝塔“监控”中观察IO曲线,应明显低于套餐上限。
- 使用
ab或wrk进行压力测试(例如ab -n 1000 -c 50 http://你的域名/),观察是否出现失败请求。 - 用浏览器访问网站,打开开发者工具查看Network面板,确认没有请求被阻塞。
- 持续观察24小时,如果704错误不再出现,说明优化生效。
如果优化后仍然频繁触发限制,可能是虚拟主机套餐本身资源不足,建议联系服务商升级套餐或迁移到独立服务器。
常见疑问
问:704错误和500错误有什么区别?
答:500是程序内部错误,704是资源超限。500需要查代码,704需要查IO和并发。
问:为什么白天正常,晚上就出现704?
答:晚上访问量增加,并发连接和IO读写同时升高,更容易触顶。可以设置定时任务在低峰期执行备份等耗IO操作。
问:虚拟主机限制说明中的IO上限一般是多少?
答:不同服务商标准不同,常见范围是1MB/s到10MB/s。具体数值请以你购买时的套餐说明或控制台显示为准。