1. 从零到一:为什么选择CentOS Stream 9作为你的新起点
最近在社区里看到不少朋友在问CentOS 9的安装配置,结合最近一些网络热词,比如“centos9镜像下载”、“linux国产”这些,感觉大家对于新一代的企业级Linux发行版既好奇又有点无从下手。作为一个从CentOS 6一路用到Stream 9的老用户,我想结合自己的实际部署经验,来聊聊这个“熟悉的陌生人”。CentOS Stream 9,它不再是过去那个“RHEL的免费复刻版”,而是变成了RHEL的上游开发分支。这个定位的转变,意味着它比过去的CentOS更“前沿”一些,能让你提前体验到下一个RHEL次要版本的新特性,对于想紧跟技术潮流又需要稳定基础的用户来说,其实是个挺有意思的选择。
我选择在全新的服务器上部署它,主要是看中了几个点:一是它继承了RHEL强大的稳定性和企业级软件生态,二是作为上游,它能让我更早地接触和测试新内核、新工具链(比如GCC 11、Python 3.9),三是它的生命周期支持依然有保障。当然,对于生产环境,你可能需要更谨慎地评估。但无论是用于学习、开发测试,还是作为前沿技术的尝鲜平台,CentOS Stream 9都是一个非常扎实的起点。接下来,我会把从镜像获取、安装、基础配置到常用环境搭建的完整链条拆开揉碎了讲清楚,里面会穿插很多我实际踩过的坑和验证过的优化项。
2. 安装前的关键决策:镜像、引导与分区规划
安装Linux,第一步往往就决定了后续的体验是否顺畅。很多人卡在启动不了或者分区不合理上,回头重装费时费力。
2.1 获取与验证官方镜像
首先,镜像的来源一定要可靠。最直接的途径是访问CentOS官方站点或认可的镜像站。不要随便在第三方网站下载,以免镜像被篡改植入后门。下载完成后,务必要进行校验和验证。这是很多新手会忽略但极其重要的一步。
# 假设你下载的镜像文件名为 CentOS-Stream-9-latest-x86_64-dvd1.iso # 首先,下载对应的校验文件(通常是 .iso 和 .iso.sha256sum 成对出现) wget https://mirror.centos.org/centos/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso.sha256sum # 然后计算你本地镜像文件的SHA256值 sha256sum CentOS-Stream-9-latest-x86_64-dvd1.iso # 将计算出的哈希值与下载的 .sha256sum 文件中的内容进行比对 cat CentOS-Stream-9-latest-x86_64-dvd1.iso.sha256sum如果两者一致,恭喜你,镜像文件是完整且未被修改的。如果不一致,请立即删除并重新下载。
2.2 制作启动盘与引导设置
有了干净的镜像,接下来是制作启动介质。我强烈推荐使用dd命令或者Rufus(Windows下)这类工具以“DD镜像模式”写入U盘,而不是普通的“ISO镜像模式”。对于Linux和类Unix系统安装盘,“DD模式”的兼容性是最好的,它能确保U盘被做成一个完整的、可引导的磁盘镜像拷贝。
# Linux/macOS下使用dd命令,请务必确认of参数是你的U盘设备(如/dev/sdb),而不是分区(如/dev/sdb1)! # 使用 lsblk 命令确认U盘设备名 sudo dd if=./CentOS-Stream-9-latest-x86_64-dvd1.iso of=/dev/sdb bs=4M status=progress oflag=sync注意:
dd命令非常强大但也危险,一旦of目标设备指定错误,可能会清空你的系统硬盘数据。操作前请反复确认。
制作好启动盘后,进入服务器的BIOS/UEFI设置。这里有几个关键点:
- 启动模式:如果你的服务器支持UEFI,并且你计划使用GPT分区表(对于大于2TB的磁盘是必须的),请确保设置为“UEFI”启动模式,或者“UEFI优先”。如果是老旧的纯BIOS(Legacy)模式,则对应MBR分区表。
- 安全启动(Secure Boot):对于CentOS Stream 9,通常可以开启Secure Boot,系统安装的引导程序(shim)是经过签名的。如果遇到无法引导的情况,可以尝试暂时关闭Secure Boot进行安装。
- 启动顺序:将你的U盘设为第一启动项。
2.3 磁盘分区方案:兼顾性能与管理的艺术
安装程序进入图形化界面后,最重要的决策之一就是磁盘分区。自动分区虽然方便,但往往不够优化。对于服务器,我习惯手动分区,以下是一个兼顾系统性能、数据安全和后期维护的通用方案(以一块数据盘为例,系统盘同理但更精细):
| 挂载点 | 建议大小 | 文件系统类型 | 说明与理由 |
|---|---|---|---|
/boot或/boot/efi | 1GB (UEFI) / 500MB (BIOS) | xfs (boot) / vfat (efi) | /boot存放内核和引导文件。UEFI模式下需要单独的/boot/efi(EFI系统分区),格式必须是vfat。大小给足,避免未来内核更新过多导致空间不足。 |
/(根分区) | 50-100GB | xfs | 根目录,存放系统核心文件、基本应用程序。不建议太小,要预留安装软件和系统日志的空间。XFS是CentOS/RHEL系列的默认且成熟的文件系统,处理大文件性能好。 |
/home | 视需求而定 | xfs | 用户家目录。将用户数据和系统分离是好习惯。这样即使系统崩溃需要重装,只要不格式化/home,用户数据就能保留。可以根据服务器用途分配剩余大部分空间。 |
/var | 30-50GB | xfs | 存放可变数据,如日志(/var/log)、缓存、数据库文件等。日志增长可能很快,单独分区可以防止日志写满导致整个系统瘫痪。对于邮件、Web服务器,这个分区应该更大。 |
/tmp | 10-20GB | xfs | 临时文件目录。有些程序会在这里生成大量临时文件。单独分区可以设置特定的挂载选项(如noexec, nodev, nosuid)以增强安全性。 |
swap | 物理内存的1-2倍(现代服务器可酌情减少) | swap | 交换分区。当物理内存不足时使用。对于内存大于16GB的服务器,如果确认应用内存需求稳定,可以设置等于或略小于物理内存的大小,甚至对于拥有超大内存(如128GB以上)的云主机,如果确保内存充足,可以只给4-8GB的swap用于休眠支持。 |
分区实操心得:
- LVM的取舍:上述方案是基于直接分区的。对于灵活性要求极高的环境,强烈推荐使用LVM(逻辑卷管理)。你可以先创建几个大的物理卷(PV),然后加入卷组(VG),最后在VG上按需划分逻辑卷(LV)来对应上面的各个挂载点。这样做的好处是未来某个分区(如
/home)空间不足时,可以从VG中动态扩容,而无需停机或迁移数据。安装程序界面可以直接配置LVM,对于新手来说稍微复杂一点,但长远来看管理更便捷。 - 文件系统格式:坚持使用XFS。它是RHEL/CentOS的“亲儿子”,针对大容量存储和并发I/O做了大量优化,特别是处理海量小文件(如日志)时,其性能和管理工具链(如
xfs_growfs在线扩容)都非常成熟可靠。Ext4虽然通用,但在CentOS生态下,XFS是更受推荐的选择。 - 预留未分配空间:如果你不确定未来用途,或者磁盘非常大,可以在分区时留出一部分空间不分配。这部分空间后期可以用于创建新的分区,或者扩容现有的LVM卷组,为未来留下弹性。
3. 首次启动后的“开箱即用”配置清单
系统安装完成,重启后以root用户登录。别急着装应用,先把系统基础环境调校好,这能让后续所有操作事半功倍。
3.1 网络配置:从DHCP到静态IP的稳定化
安装时如果使用了DHCP,首次启动后第一件事就是配置静态IP,这对于服务器至关重要。CentOS Stream 9使用NetworkManager和nmcli命令行工具作为网络管理的主流,传统的/etc/sysconfig/network-scripts/目录下的ifcfg-*文件方式在9中已不被推荐用于新配置。
# 1. 查看当前的网络连接名称 nmcli connection show # 你会看到类似 `Wired connection 1` 或 `ens192` 这样的NAME。 # 2. 假设连接名是 `ens192`,我们将其配置为静态IP # 修改IPv4配置方法为manual,并设置地址、网关、DNS nmcli connection modify ens192 ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8 114.114.114.114" # 这里 `192.168.1.100/24` 是IP和子网掩码(/24代表255.255.255.0) # DNS服务器设置了两个,用空格分隔。 # 3. 使配置生效 nmcli connection up ens192 # 4. 验证配置 ip addr show ens192 ping -c 4 8.8.8.8 # 测试外网连通性 nslookup www.baidu.com # 测试DNS解析注意:如果你的服务器有多个网卡,或者需要配置bonding、桥接等复杂网络,
nmcli同样可以胜任,但命令会更复杂。对于简单的服务器,上述静态IP配置已经足够。确保IP地址、网关和DNS服务器地址符合你实际的网络规划。
3.2 系统更新与基础工具安装:打好底子
配置好网络,接下来更新系统并安装一批必备的“瑞士军刀”式工具。
# 1. 更新系统所有包到最新版本 dnf update -y # CentOS Stream 9 使用 dnf 作为包管理器,yum 是其符号链接。 # 2. 安装常用工具集 dnf install -y epel-release # 首先安装EPEL仓库,它提供了大量额外的软件包 dnf install -y vim wget curl net-tools lsof bash-completion htop tree psmisc ncdu git # 简要说明: # vim: 强大的文本编辑器。 # wget/curl: 网络下载工具。 # net-tools: 包含ifconfig, netstat等传统网络工具(虽然ip命令是未来,但很多脚本仍依赖它们)。 # lsof: 列出打开的文件,排查“文件被占用”问题的神器。 # bash-completion: Bash命令自动补全增强。 # htop: 交互式进程查看器,比top更直观。 # tree: 以树状图列出目录内容。 # psmisc: 包含pstree, killall等工具。 # ncdu: 磁盘使用情况分析器,交互式界面很好用。 # git: 版本控制工具。更新与安装避坑点:
epel-release:这是必须的。很多常用的、不在基础仓库里的软件(如htop,ncdu, 后来的nginx等)都来自EPEL仓库。安装时可能会询问是否导入GPG密钥,确认即可。- 大版本更新谨慎:
dnf update会更新所有包。对于生产服务器,建议先在一台测试机上操作,观察有无不兼容变更。虽然Stream 9作为上游相对稳定,但保持谨慎总是好的。 - 选择最小化安装:如果你在安装时选择了“最小化安装(Minimal Install)”,那么上述大部分工具都需要手动安装。这是一个干净的开始,推荐给所有服务器。
3.3 安全加固第一步:防火墙与SELinux
安全不是可选项。CentOS Stream 9默认启用了firewalld防火墙和SELinux。对于新手,SELinux可能是最让人头疼的,但请不要直接禁用它。理解并正确配置它,是系统安全的重要防线。
配置firewalld开放必要端口: 假设我们要开放SSH(22)、HTTP(80)、HTTPS(443)端口。
# 查看默认区域和当前规则 firewall-cmd --list-all # 永久开放端口(--permanent参数表示写入配置,重启后生效) firewall-cmd --permanent --add-service=ssh # 开放SSH服务(端口22) firewall-cmd --permanent --add-service=http # 开放HTTP服务(端口80) firewall-cmd --permanent --add-service=https # 开放HTTPS服务(端口443) # 如果你需要开放特定端口,比如一个自定义的8080端口 # firewall-cmd --permanent --add-port=8080/tcp # 重新加载防火墙配置,使更改立即生效(同时保留永久配置) firewall-cmd --reload # 再次查看确认 firewall-cmd --list-all理解并应对SELinux: SELinux会在进程和文件上打上安全上下文标签,强制实施访问控制。很多服务启动失败(比如Nginx无法读取网页文件,MySQL无法写数据目录)都是SELinux上下文不对导致的。
- 查看上下文:
ls -Z /var/www/html - 临时解决(不推荐长期使用):如果确定是SELinux阻止,可以临时设置为宽容模式观察日志:
setenforce 0。但这会降低安全性。 - 正确解决方法:
- 使用正确的SELinux布尔值:很多常见问题都有预设的开关。例如,允许HTTPD服务访问网络:
setsebool -P httpd_can_network_connect on(-P表示永久生效)。 - 修正文件上下文:如果文件或目录的SELinux标签不对,使用
chcon或semanage修复。例如,将自定义网页目录的上下文设置为和/var/www/html一样:chcon -R -t httpd_sys_content_t /path/to/your/webdir。 - 查看日志:绝大多数SELinux拒绝信息都记录在
/var/log/audit/audit.log中。更友好的查看方式是使用sealert工具(需要安装setroubleshoot-server包):sealert -a /var/log/audit/audit.log。它会给出详细的分析和修复建议命令。
- 使用正确的SELinux布尔值:很多常见问题都有预设的开关。例如,允许HTTPD服务访问网络:
我的建议是:保持SELinux处于强制模式(Enforcing)。遇到权限问题时,首先怀疑SELinux,并通过上述方法解决。这能帮你建立起对强制访问控制机制的理解,极大地提升系统安全性。
4. 核心服务环境搭建实战:Web、数据库与开发栈
基础系统稳固后,就可以搭建具体的应用环境了。这里以最常见的LAMP/LEMP栈和开发环境为例。
4.1 Web服务器:Nginx vs. Apache的选择与配置
Nginx因其高并发、低内存占用和反向代理的强大能力,在现代Web架构中更受欢迎。这里以安装Nginx为例。
# 安装Nginx (来自EPEL仓库) dnf install -y nginx # 启动Nginx并设置开机自启 systemctl start nginx systemctl enable nginx # 检查防火墙,确保80/443端口已开放(前面已做) # 现在可以通过服务器IP访问到Nginx欢迎页面了基础配置与虚拟主机: Nginx的主配置文件是/etc/nginx/nginx.conf,但通常我们不在主配置里直接修改,而是在/etc/nginx/conf.d/目录下为每个网站创建独立的.conf文件。
假设我们要配置一个域名为www.yourdomain.com的网站,根目录在/var/www/yourdomain。
- 创建网站根目录并设置权限:
mkdir -p /var/www/yourdomain chown -R nginx:nginx /var/www/yourdomain # 将目录所有者改为nginx运行用户 chmod -R 755 /var/www/yourdomain - 创建虚拟主机配置文件:
输入以下内容:vim /etc/nginx/conf.d/yourdomain.confserver { listen 80; server_name www.yourdomain.com yourdomain.com; root /var/www/yourdomain; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 如果需要处理PHP,可以添加下面这个location块(需先安装PHP-FPM) # location ~ \.php$ { # fastcgi_pass unix:/run/php-fpm/www.sock; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # include fastcgi_params; # } error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } - 测试配置并重载Nginx:
nginx -t # 测试配置文件语法,看到 `syntax is ok` 和 `test is successful` 才算成功 systemctl reload nginx # 平滑重载配置,不影响现有连接 - SELinux上下文:别忘了给网站目录设置正确的SELinux标签,否则Nginx会报403错误。
chcon -R -t httpd_sys_content_t /var/www/yourdomain # 如果网站需要写入文件(如上传、缓存),还需要额外授权 # chcon -R -t httpd_sys_rw_content_t /var/www/yourdomain/upload
4.2 数据库安装:以MySQL 8.0 / MariaDB 10.5为例
CentOS Stream 9默认仓库可能提供的是较新版本的MySQL或MariaDB。这里以安装MySQL 8.0为例。
# 1. 启用MySQL官方仓库(如果需要特定版本,如MySQL 8.0) # 访问 https://dev.mysql.com/downloads/repo/yum/ 获取最新的repo包 wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm sudo dnf install -y mysql80-community-release-el9-1.noarch.rpm # 2. 安装MySQL服务器 sudo dnf install -y mysql-community-server # 3. 启动并设置开机自启 sudo systemctl start mysqld sudo systemctl enable mysqld # 4. 获取初始临时密码 sudo grep 'temporary password' /var/log/mysqld.log # 输出类似:`A temporary password is generated for root@localhost: 初始密码` # 5. 运行安全配置向导 sudo mysql_secure_installation按照向导提示操作:输入临时密码 -> 设置新强密码 -> 移除匿名用户 -> 禁止root远程登录(建议) -> 移除测试数据库 -> 重新加载权限表。
关键配置与优化: MySQL的主配置文件是/etc/my.cnf。对于生产环境,你需要根据服务器内存调整一些关键参数。以下是一个针对4GB内存服务器的示例配置片段(可以放在/etc/my.cnf.d/my-server.cnf中):
[mysqld] # 基础 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # 内存相关 innodb_buffer_pool_size = 1G # 对于4G内存,分配1-1.5G给InnoDB缓冲池是合理的起点 key_buffer_size = 256M # MyISAM表索引缓存(如果不用MyISAM可以设小点) query_cache_size = 0 # MySQL 8.0已移除查询缓存,此项无效,但配置文件中可能还有,可以注释掉 # 连接与线程 max_connections = 200 # 最大连接数,根据应用调整 thread_cache_size = 10 # 日志 slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 2 # 超过2秒的查询视为慢查询 # InnoDB配置 innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 1 # 最安全,性能稍差。2或0可提升性能但牺牲一定安全性。修改配置后需要重启MySQL:sudo systemctl restart mysqld。
4.3 开发环境配置:Python、Node.js与Git
Python 3.9+:CentOS Stream 9默认可能已经安装了Python 3.9。你可以通过python3 --version查看。如果需要安装其他版本(如Python 3.11),建议使用dnf从AppStream仓库安装特定模块版本,或者使用pyenv进行多版本管理,避免破坏系统自带的Python。
# 查看可用的Python版本 dnf module list python39 # 安装Python 3.9及其常用开发包 dnf install -y python39 python39-devel # 使用python3.9命令调用Node.js 18+:Node.js在默认仓库中版本可能较旧。建议从NodeSource仓库安装LTS版本。
# 安装NodeSource仓库脚本(以Node.js 18.x为例) curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - # 安装Node.js sudo dnf install -y nodejs # 验证 node --version npm --versionGit:前面基础工具已经安装。这里主要说配置。
# 设置全局用户名和邮箱 git config --global user.name "Your Name" git config --global user.email "your.email@example.com" # 生成SSH密钥用于免密连接Git仓库(如GitHub, GitLab) ssh-keygen -t ed25519 -C "your.email@example.com" # 推荐ed25519算法,更安全 # 一路回车,默认保存在 ~/.ssh/id_ed25519 和 ~/.ssh/id_ed25519.pub # 查看公钥并复制到你的Git托管平台 cat ~/.ssh/id_ed25519.pub5. 进阶配置与运维效率工具
系统和服务跑起来后,还有一些配置能极大提升管理效率和系统可靠性。
5.1 时间同步(NTP)配置:保持时间一致
服务器时间不准会导致日志时间错乱、证书验证失败、分布式系统混乱等一系列问题。使用chronyd服务进行时间同步。
# 1. 安装chrony(通常已预装) dnf install -y chrony # 2. 编辑配置文件,可以添加更快的国内NTP服务器 vim /etc/chrony.conf # 在 `pool` 开头的行下面,可以添加或替换为: # server ntp.aliyun.com iburst # server cn.pool.ntp.org iburst # 3. 启动并设置开机自启 systemctl start chronyd systemctl enable chronyd # 4. 查看时间同步状态 chronyc sources -v chronyc trackingiburst参数可以让客户端在启动后快速进行数次同步,加速初始同步过程。
5.2 配置系统日志轮转(logrotate)
系统和服务日志会不断增长,需要定期轮转、压缩和清理。logrotate是完成这个任务的利器。它通过cron定期运行。
# 查看Nginx的日志轮转配置示例 cat /etc/logrotate.d/nginx你可以为自定义应用创建轮转配置。例如,在/etc/logrotate.d/下创建文件myapp:
/var/log/myapp/*.log { daily # 每天轮转 missingok # 如果日志文件丢失,不报错 rotate 30 # 保留30份旧日志 compress # 压缩旧日志 delaycompress # 延迟一天压缩(方便查看最新的旧日志) notifempty # 如果日志为空,则不轮转 create 640 nginx adm # 轮转后创建新日志文件,并设置权限和属主 sharedscripts # 在所有日志轮转后执行一次postrotate脚本 postrotate # 发送信号让Nginx重新打开日志文件,这里以自定义应用为例,如果是Nginx,通常是 `nginx -s reopen` # kill -USR1 `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true endscript }logrotate通常由cron.daily在每天定时运行。你也可以手动测试配置:logrotate -d /etc/logrotate.d/myapp(-d是调试模式,不实际执行)。
5.3 使用Cockpit进行Web可视化管理
如果你不习惯纯命令行,或者希望有一个轻量级的Web控制台来监控服务器状态、管理容器、查看日志等,Cockpit是一个不错的选择。它是Red Hat家族自带的现代化管理工具。
# 安装Cockpit及相关模块 dnf install -y cockpit cockpit-podman cockpit-machines cockpit-storaged cockpit-networkmanager # 启动并启用服务 systemctl start cockpit.socket # Cockpit使用socket激活,更节省资源 systemctl enable cockpit.socket # 开放9090端口(如果防火墙开启) firewall-cmd --permanent --add-service=cockpit firewall-cmd --reload安装完成后,在浏览器中访问https://你的服务器IP:9090,使用系统的root或具有sudo权限的用户登录即可。在Cockpit里,你可以直观地查看系统资源使用情况(CPU、内存、磁盘、网络)、查看系统日志、管理用户、配置网络、甚至管理Podman容器(Docker的替代品)。
6. 常见问题排查与性能调优思路
即使按照步骤操作,也难免会遇到问题。这里列举几个安装配置后可能遇到的典型问题及其排查思路。
6.1 网络连通性问题排查链路
如果配置完静态IP后无法上网,可以按照以下链路排查:
- 检查IP配置:
ip addr show确认IP和子网掩码是否正确配置且网卡状态为UP。 - 检查网关:
ip route show查看默认网关(default via ...)是否正确。 - 测试网关连通性:
ping -c 4 192.168.1.1(你的网关IP)。如果不通,可能是物理线路、交换机端口或本地防火墙(非firewalld,可能是网络设备防火墙)问题。 - 测试DNS解析:
nslookup www.baidu.com。如果返回server can't find,说明DNS解析失败。检查/etc/resolv.conf文件中的nameserver设置是否正确,或者用ping 8.8.8.8测试是否能到达外网IP。如果IP能通但域名不能解析,就是DNS问题。 - 检查firewalld:
firewall-cmd --list-all确认没有误拦截。可以临时关闭防火墙测试:systemctl stop firewalld,如果网络恢复,说明是防火墙规则问题。 - 检查NetworkManager连接状态:
nmcli connection show --active查看活动连接。nmcli device status查看设备状态。
6.2 服务启动失败通用排查步骤
以systemctl start nginx失败为例:
- 查看状态详情:
systemctl status nginx.service -l。-l参数会显示完整的日志输出,这里通常会有第一手的错误信息。 - 查看服务特定日志:大多数服务有自己的日志文件。对于Nginx,可以看
/var/log/nginx/error.log。对于MySQL,看/var/log/mysqld.log。使用journalctl -u nginx.service(-u指定单元名)也能查看systemd管理的服务的日志。 - 检查配置文件语法:很多服务提供语法检查命令。如Nginx的
nginx -t,MySQL的mysqld --verbose --help(或启动前检查)。 - 检查端口占用:
ss -tlnp | grep :80查看80端口是否被其他进程占用。 - 检查SELinux:如果日志中出现“Permission denied”且文件权限正常,立刻怀疑SELinux。使用
sealert -a /var/log/audit/audit.log或ausearch -m avc -ts recent查看SELinux拒绝信息。 - 检查依赖:有些服务依赖其他服务或文件系统。确保所有依赖已就绪。
6.3 基础性能观察与调优点
系统安装配置好后,如何知道它运行得是否健康?
- 整体负载:
uptime命令查看1、5、15分钟的平均负载。htop直观查看CPU、内存、进程。 - 内存:
free -h查看内存使用。重点看available列,这是系统可用的内存(包括缓存和缓冲)。Linux会充分利用内存做缓存,所以used高不一定有问题。 - 磁盘I/O:
iostat -x 1查看磁盘利用率(%util)、等待时间(await)。如果%util持续接近100%,说明磁盘是瓶颈。 - 网络:
iftop或nethogs查看实时网络流量和进程占用。 - 简单调优:
- I/O调度器:对于SSD,建议使用
noop或deadline调度器。可以通过cat /sys/block/sda/queue/scheduler查看当前,echo noop > /sys/block/sda/queue/scheduler临时修改(需根据磁盘实际名称,如nvme0n1)。 - 内核参数:对于高并发Web服务器,可能需要调整网络相关参数,如
net.core.somaxconn(TCP连接队列)、net.ipv4.tcp_tw_reuse等。修改/etc/sysctl.conf文件,然后执行sysctl -p生效。修改内核参数需要谨慎,最好有依据和测试。 - 服务配置:如前面MySQL配置示例,根据硬件资源调整服务的内存、连接数等参数是最直接的性能调优手段。
- I/O调度器:对于SSD,建议使用
从选择镜像、规划分区,到配置网络、安全加固,再到搭建Web、数据库和开发环境,最后到日常的运维工具和问题排查,这套流程覆盖了一台CentOS Stream 9服务器从零到生产就绪状态的核心路径。每个环节的决策和操作背后,都包含着对稳定性、安全性和可维护性的权衡。我自己的习惯是,任何新服务器上线前,都会用一份类似的检查清单过一遍,确保基础牢靠。尤其是SELinux和防火墙,初期多花点时间理解它们,后期能避免无数诡异的“玄学”问题。记住,最好的配置不是最复杂的,而是最适合你当前业务需求、并且你能够完全理解和掌控的那一套。