云主机怎么调整配置?

HCRM技术_小炮 云主机 2026-05-09 1 0

云主机到手后别急着用,这些“调教”技巧能省下几千块

前两天一个刚创业的朋友兴冲冲地告诉我,他在某云厂商买了台4核8G的云主机,准备部署他们的电商网站,结果上线当天,用户一多网页就卡成狗,后台CPU直接飙到100%,他跑来问我:“我这云主机到底怎么调啊?是不是云厂商坑我,给的性能不对?”

这种场景太常见了,很多人买了云主机,以为就像买台台式机,插上电就能跑得飞起——错,云主机本质上是一台虚拟化的机器,它的性能、稳定性、安全性,很大程度上取决于你怎么“调”,这篇文章就跟你聊聊,从拿到一台裸机到让它稳定、高效、省钱地跑业务,你到底应该调哪些地方。

第一步:别被默认参数骗了,操作系统先“收拾”一遍

大多数云厂商提供的系统镜像,默认参数都是为了兼容性而设置的,绝不是为了高性能,拿到机器后,第一件事就是登录,然后调整几个关键的系统级参数。

1. 内核参数调优

打开/etc/sysctl.conf(以Linux为例),有几项你必须关注:

net.core.somaxconn:默认128,对于高并发Web服务远远不够,建议改成1024或更高。

net.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recycle:这两个控制TIME_WAIT状态连接的重用,如果你的业务是短连接(比如很多API服务),开启tcp_tw_reuse并配合tcp_fin_timeout设置短一点(比如15秒),能明显减少端口耗尽的问题,注意,tcp_tw_recycle在NAT环境下会有问题,谨慎开启。

vm.swappiness:默认60,意味着系统在内存还剩很多时就开始用交换分区,云主机的磁盘IO通常比不上内存速度,建议改成10或者更小,尽量减少Swap使用。

fs.file-max:文件句柄数,很多应用(比如Nginx、Redis)需要打开大量文件,默认几千根本不够,建议设成几百万。

改完别忘了sysctl -p让它生效。

2. 关闭不需要的服务

云厂商的镜像里常常预装了一堆东西:cloud-init(如果已经初始化完了可以删)、sshd也许没问题,但像postfix、cups、avahi-daemon这些,除非你明确需要,否则统统禁用,每少一个无关进程,就多一分资源给业务。

3. 磁盘挂载与I/O调度

现在云主机大多用SSD,但系统默认的I/O调度器可能是cfq(完全公平队列),这对SSD反而是性能浪费,改成nonenoop(视内核版本而定)能让I/O延迟更低,命令例子:echo none > /sys/block/vda/queue/scheduler,挂载分区时加上noatime参数,避免每次读取都更新文件访问时间,能减少大量磁盘写入。

第二步:你的业务需要什么,云主机就长什么样

“云主机怎么调”这句话,其实隐含了一个前提:调优是业务驱动的,跑数据库和跑Web服务器,调法完全相反。

场景一:跑Web服务(Nginx/Apache)

这类场景通常对CPU和网络吞吐要求高,但对内存相对不那么敏感,你可以调整:

- Nginx的worker进程数设置为CPU核心数,或者auto

- 开启sendfiletcp_nopushtcp_nodelay

- 客户端长连接的超时时间根据业务调短(比如65秒),避免太多空闲连接耗尽worker连接数。

- 如果前端用了CDN,那Web服务器本身主要处理动态请求,静态资源交给CDN,云主机的带宽压力会小很多,这时候调优重点就转移到后端语言(PHP、Node.js、Python)的进程管理上。

场景二:跑数据库(MySQL/PostgreSQL)

数据库是IO敏感型,调整思路完全不一样:

InnoDB buffer pool大小:这是MySQL最核心的内存区,设为可用内存的60%-70%左右(如果你机器只有4G内存,就别给它2.8G以上,留点给系统)。

日志文件大小innodb_log_file_size默认只有几十MB,高并发更新场景下很容易让磁盘写爆,建议至少512MB或1G。

查询缓存:MySQL 8.0已废弃,老版本建议关闭(query_cache_type=0),因为它在高并发下反而成瓶颈。

磁盘: 强烈建议云主机选用挂载的云盘而不是系统盘,如果是数据库,更推荐用SSD或者企业级的高IO云盘,并且启用discard(trim)功能,数据库的binlog、redo log、数据文件最好能分到不同物理盘上(云主机可以挂载多个云盘),避免IO争抢。

场景三:跑中间件(Redis/RabbitMQ)

Redis虽然本身就是内存数据库,但很多人忽略了操作系统内存分配器的配置,Linux默认使用glibc的malloc,容易产生碎片,换成jemalloc或tcmalloc后,Redis内存利用率能提升5%-10%,Redis的持久化(RDB/AOF)如果频率过高,会大量消耗CPU和磁盘IO,如果业务允许丢少量数据,可以关闭持久化或调低写入频率。

第三步:安全不是“装了防火墙就行”,要调的是最小权限

很多人在云主机上直接开一个root用户,密码设成123456……然后被黑客扫到直接沦陷,云主机的安全调整不能只靠云厂商提供的安全组,操作系统层面的调教更重要。

SSH配置:禁止root直接登录(PermitRootLogin no),改用普通用户+sudo,端口改成非标准端口(比如22022),启用密钥登录并关闭密码登录,这些改动在/etc/ssh/sshd_config里调整。

fail2ban:装上它,配置监控SSH、Nginx或邮件服务的暴力破解,连续失败几次就临时封IP,这个工具配置简单,但能挡掉90%的扫描机器人。

系统更新:别嫌麻烦,每个月至少跑一次yum updateapt upgrade,很多漏洞都是通过系统包修复的,云主机一旦被挖矿病毒入侵,你损失的可不止是那点资源,还有赔付时间和声誉。

最小化安装:如果可能,初始选择最小化镜像(像Debian的netinstall或CentOS的minimal),后期需要什么装什么,装一个不用的Apache或MySQL,就等于多了一个攻击面。

第四步:监控报警不调好,等于裸奔

很多人直到云主机宕机、业务全挂了才想起来看监控——这已经晚了,调云主机,也包括调它的“感官”:让它能在出问题之前告诉你。

- 安装基本的监控工具:htopiotopiftop,可以快速排查问题。

- 设置云厂商自带的云监控:CPU使用率、内存、磁盘IO、带宽,关键指标设置告警阈值,比如CPU连续5分钟超过90%就发短信。

日志集中管理journalctl/var/log/messages/var/log/nginx/access.log,最好能自动轮转并上传到日志服务(或者自己搭一个ELK),很多问题看日志才能定位到。

记得给定时任务(cron)加上异常通知,比如你有一个凌晨备份的脚本,如果它因为磁盘满失败了,而你不知道,等需要恢复数据时发现根本没有备份,那画面太美不敢看。

第五步:性能压测——调完了到底好不好?

很多人调完参数就收工了,但到底有没有效果?需要用工具说话。

CPU和内存sysbench可以压测CPU的整数运算和内存的读写速度,对比调整前后的得分。

磁盘fio是专业的磁盘IO测试工具,测试随机读写、顺序读写,注意,压测时不要在生产业务高峰期跑,磁盘IO被打满会影响业务。

网络iperf3可以测两台云主机之间的带宽和延迟,如果发现带宽达不到标称值,可能要检查安全组规则、内核参数(如TCP窗口大小)或云厂商的流量限速。

应用级压测:Web服务用wrkab,数据库用mysqlslappgbench,压测结果就是你的调优成绩单。

有一次,我帮一个客户调一个跑在云主机上的消息队列,仅仅是调整了内核的net.core.rmem_maxnet.core.wmem_max,流量从每秒3万条上升到8万条,客户惊了。

别忘了云主机的“软成本”调优

“云主机怎么调”不光是技术上的,还有成本上的,云厂商的计费模式多种多样,如果不去“调”你的实例配置和账单,很容易花冤枉钱。

按需 vs 包年包月:如果你的业务跑满全年,包年包月通常能省30%-40%,如果业务有波谷,可以考虑用按量付费+定时释放。

弹性伸缩:如果你的网站流量有高峰低谷,可以配置自动伸缩组,平时用2台小配置,高峰期自动扩展到10台,高峰结束后自动缩回,这样既保证体验又省钱。

实例规格的选择:不是核数越高越好,有些业务对单核性能敏感,那么选高频CPU的实例(比如Intel Xeon Platinum系列);有些业务对内存带宽敏感,那就要考虑云厂商的“内存型”或“计算型”产品族,不要无脑选通用型。

写在最后

云主机就像一把工具刀,出厂时是钝的,你需要自己打磨、上油、调校,才能让它切菜如泥,调优没有统一的“配方”,只有根据你的业务特点、负载模型、成本预算去逐步摸索,每调整一个参数,都记住一个原则:只改一个,测试对比,记录结果,改错了马上回滚,别一次改十几个参数,到时候出问题根本不知道是哪一个导致的。

如果你现在手上就有一台云主机正卡得要命,不妨从检查系统内核参数、关闭无用服务开始,然后针对你的应用(Web、数据库、中间件)做针对性调整,最后再压测一遍,感受一下“调”的魔力,相信我,那个性能提升带来的成就感,可能比写业务代码还爽。

你动手调了吗?欢迎留言分享你的调优经历。

文章摘自:https://idc.huochengrm.cn/zj/25485.html

评论