加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0577zz.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux环境搭建太慢?3步绕过90%配置陷阱

发布时间:2026-11-03 08:04:22 所属栏目:Linux 来源:DaWei
导读:  跟产品吵。去年五月那版边缘节点上线,我原以为就是个内核参数微调+systemd service reload的事,结果PM蹲在机房门口盯着我敲完最后一行ansible-playbook,说“这个环境得跑通全链路压测”,我手一抖把--limit写成--skip

  跟产品吵。去年五月那版边缘节点上线,我原以为就是个内核参数微调+systemd service reload的事,结果PM蹲在机房门口盯着我敲完最后一行ansible-playbook,说“这个环境得跑通全链路压测”,我手一抖把--limit写成--skip-tags,八台ARM64节点直接卡在cloud-init的netplan apply里。监控大屏上那个标着“edge-pool-07”的CPU曲线,本来稳稳趴着,忽然弹了一下——像被谁用指甲盖掐了下——就一下,然后继续躺平。没人管它。


  第一步:删掉所有rpm包管理器默认启用的GPG校验。不是禁用,是物理删除/etc/pki/rpm-gpg/下那仨key文件。去年五月我们灰度开关没推完,一半节点装的是CentOS 7.9-minimal,一半是Rocky 8.8-stream,结果rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial执行失败,但playbook里没加ignore_errors: true,整个yum install openssl-devel卡死在第二步。这个我敢打包票——你去查/var/log/yum.log,2023年5月17号14:23:07那一行,error: rpmdb: damaged header,后面跟着三十七行重复的warning: /var/cache/yum/x86_64/8/baseos/packages/kernel-.rpm: Header V4 RSA/SHA256 Signature, key ID : NOKEY。不是配置问题,是key本身在离线镜像里被截断了两百三十一个字节。


  前端小张昨天下午三点四十二分冲进运维室,甩给我一张Jira截图,标题是“/api/v1/edge/config 返回502不是我们前端写的bug”。我没抬头,一边解压那个编译了五次才过的nginx-module-edge-route,一边把咖啡杯往右推了七厘米——杯底印着公司logo的那圈白漆早磨花了,露出底下青灰色搪瓷。他站那儿没走,我就说:“你让测试先抓个包,别抓localhost,抓eth0出口,看SYN有没有被iptables DROP。”结果他转身撞到门框上,工牌绳子绷直又弹回去,啪一声。


  第二步:systemd-resolved?关。不管它是不是“推荐配置”,关。去年五月那天我改了/etc/resolv.conf硬写nameserver 10.12.0.1之后,有三台节点resolve超时时间从三百二十毫秒跳到三千八百毫秒,原因?systemd-resolved自己开了个stub listener占着53端口,但上游DNS服务器响应慢了二百六十毫秒以上,它就直接返回SERVFAIL——而不是转发给resolv.conf里真正的nameserver。我删掉resolved.service的enable状态、mask掉、再rm -f /run/systemd/resolve/stub-resolv.conf,这事儿才算完。但有个细节很多人忽略:/etc/systemd/resolved.conf里那个FallbackDNS必须留空,不是注释掉,是清空。注释掉它会继承default值——也就是1.1.1.1和8.8.8.8,而这两个地址在我们私有云VPC里根本不可达。我说不准为什么systemd非得这么设计,但我知道它真就这么干了。


  oncall手机震了一下,我没接。是告警群@全体成员,内容就一行:“edge-sg-032 kernel panic: unable to mount root fs on unknown-block(0,0)”。我划掉屏幕锁,回了句“check grub.cfg boot entry order”,顺手把旁边椅子上搭着的防静电服往左拽了拽——袖口已经起毛边了,上次换还是前年十一月。其实这台机器上周就该重装,DBA老李非说“先扛三天,这批SQL跑完再说”,结果扛到第五天凌晨,root分区inode耗尽,连journalctl --disk-usage都报错。这种事儿你跟DBA吵?吵赢了你也得手动dd if=/dev/zero of=/dev/sdb bs=1M count=1024……


  第三步:不要touch任何/etc/sysctl.d/99-custom.conf以外的文件。绝对不要。去年五月我亲手删过一次/etc/sysctl.conf里那行net.ipv4.tcp_tw_reuse = 1,理由是“冲突”,结果三台x86节点的连接复用率从七十八下降到十九。但更邪门的是,在其中一台上,sysctl -p居然返回success,而实际值没生效——因为那个conf文件末尾缺了个换行符。Linux的sysctl.conf解析器遇到EOF不换行就静默失败,既不报错也不log。你信不信?反正我查了整整六小时strace输出才揪出来。后来我改成用echo "net.ipv4.tcp_tw_reuse = 1" > /etc/sysctl.d/99-custom.conf && sysctl -p /etc/sysctl.d/99-custom.conf ——带路径的sysctl -p才强制读指定文件,否则它只认默认目录下的所有conf,且按ASCII顺序加载。优胜劣汰?对,就这玩意儿:谁敢动老文件谁先挂,谁用新路径谁活到最后。


文章配图,仅供参考

  KPI这事我懒得说了。去年Q2我们组人均处理一百四十七次“环境初始化失败”,其中九十三次最终定位是SELinux policy没预加载,而policy文件在镜像构建阶段就被rm -rf了,理由是“减小体积”。减了四百一十二兆,多花了平均二十一分钟等待restorecon。工资单还没发,财务系统显示“待审批”,我看了一眼就关了。测试小陈刚才来倒水,拿的是我桌上那壶凉透的茶,倒完顺手把我那本《Red Hat Enterprise Linux 8 Performance Tuning Guide》翻到第一百零三页,折了角——那页讲的是vm.swappiness,但他折的其实是页眉上的“Draft 2022-11-03”几个小字。


  所以现在我的做法是:写脚本之前,先ssh到一台干净虚拟机里,手动跑三遍上面说的三步,记下每步耗时;哪步超过六秒,立刻停下,去看dmesg | tail -20。别信文档,文档写“should work”,现实是它连udev rule里那个ATTRS{bInterfaceClass}=="ff"都会因为USB热插拔顺序不对而漏触发两次。我原以为改了grub timeout就行,结果忘了update-grub后还得reboot进入UEFI shell删掉旧启动项,不然系统会卡在efibootmgr list输出的第九行那个已失效的EFI\\centos\\grubx64.efi上……这事儿我不往下说了,你要是刚接手SGX集群,先别碰libvirt,去找DBA借他桌角那盒阿尔卑斯奶糖,蓝莓味的,含在嘴里等心跳降到七十以下再打开virsh console。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!