第一章:操作系统组件
TencentOS Server 默认安装(Server 模式)仅安装了最基本的组件包(最小集),默认安装了 Server 组,满足 Server 场景下的最小需求,其他组件建议在安装完成后按需安装,相关组件和处理建议如下:
组(group)组件 | 默认安装 | 建议安装 | 说明 | 安装方式 |
Server 组 | 是 | 是 | 包含标准服务器 OS 的基础组件的最小集合,具体包括子组: Container Management Core Hardware Support Headless Management Server product core;Standard | 已默认安装 |
Base 组 | 否 | 是 | 标准安装下的基础组件,包括一些基础的工具和命令(例如 vim,wget,rsyslog,tcpdump,file 等)。 | yum groupinstall -y Base |
Minimal Install 组 | 否 | 是 | 包含最小安装下的一些基本组件(例如 kexec-tools相关组件)。 | yum groupinstall -y 'Minimal Install' |
基础静态库和中文支持 | 否 | 是 | Glibc 和 zlib 的静态库,应用程序中可能需要的中文支持、以及其他的一些基础库(如 OpenIPMI)。 | yum install -y glibc-static zlib-static glibc-langpack-zh OpenIPMI |
必要维护工具 | 否 | 是 | 系统维护需要的一些独立的、必要的工具,如crash、iotop、sysstat 等。 | yum install -y crash iotop sysstat traceroute dhcp-client |
软件源(其他) | 否 | 是 | Epe l软件源。 | yum install -y epel-release |
TencentOS 自带工具 | 否 | 是 | TencentOS 自研的部分实用工具。 | yum install -y tencentos-tools tlinux-irqaffinity |
Development Tools | 否 | 是 | 包含基本的开发工具和基础库,例如 gcc,make、各种基础库等。 | yum groupinstall -y 'Development Tools' |
Perl 基础库和运行时 | 否 | 是 | 包含 Perl 程序运行所需的基础库、解释器、运行时组件。 | yum groupinstall -y perl perl-web yum install -y perl-XML perl-JSON perl-Date |
Python 基础库和运行时 | 否 | 是 | 包含 Python 程序运行所需的基础库、解释器、运行时组件。 Python2(2.7)和 Python3(3.6)可同时安装,TencentOS Server 3 默认使用 Python3。 | yum groupinstall -y python-web yum install -y python2 python36 |
Clang(编译器) | 否 | 是 | Clang 编译器,ebpf 程序编译所需。 | yum install -y clang |
JDK(java运行时) | 否 | 按需 | Java 运行时. 腾讯有维护自研的 KonaJDK,可提供商业支持和服务。 | yum install -y java-openjdk 如需使用 konaJDK ,可使用如下命令安装:yum install -y java-11-konajdk |
Legacy 网络管理工具 | 否 | 按需 | 旧的网络管理工具 network-scripts,提供 ipup/ifdown,network service 等旧的网络管理方式。当前 TencentOS Server 3 默认使用 NetworkManager 组件管理网络,使用 nmcli 工具集。 | yum install -y network-scripts |
nginx | 否 | 按需 | 高并发网络服务器 | yum install -y nginx |
基础组件版本信息如下:
组件 | TencentOS Server 3 (5.4.119)版本 | 默认安装 | 建议安装 |
Kernel | 5.4.119 | 是 | 是 |
glibc | 2.28-164 | 是 | 是 |
gcc | 8.5.0-4 | 否 | 是 |
perl | 5.26.3-420 | 否 | 是 |
Python | 3.6.8/2.7.17 | 否 | 是 |
openjdk | 1:1.8.0.332 | 否 | 按需 |
JDK(konajdk) | java-8-konajdk-8.0.9-1.1.322 | 否 | 按需 |
php | 7.2.24-1 | 否 | 按需 |
Ruby | 2.5.5-106 | 否 | 按需 |
Node.js | 1:10.21.0-3 | 否 | 按需 |
golang | 1.15.14-1 | 否 | 按需 |
clang | 12.0.1-4 | 否 | 按需 |
mysql | 8.0.21-1 | 否 | 按需 |
mariadb | 3:10.3.27-3 | 否 | 按需 |
postgresql | 10.15-1 | 否 | 按需 |
Nginx | 1:1.14.1-9 | 否 | 按需 |
redis | 5.0.3-2 | 否 | 按需 |
iptables | 1.8.4-20 | 是 | 是 |
Openssh | 8.0p1 | 是 | 是 |
samba | 4.15.5-5 | 是 | 是 |
ethtool | 5.8-7 | 是 | 是 |
Strace | 5.7-3 | 是 | 是 |
vim | 8.0.1763-19 | 否 | 是 |
第二章:系统盘分区
推荐系统盘大小为50G/100G,一般云服务器系统盘建议50G,物理机建议100G。
以系统盘100G为例,建议分区如下:
VG 命名 | LV 命名 | 挂载点/文件系统名 | 容量标准 | 文件系统 | 备注 |
/dev/sda1 | - | /boot/efi | 600M | vfat | 必须 |
/dev/sda2 | - | /boot/ | 1G | xfs | 必须 |
ts (/dev/sda3) | swap | swap分区 | 4GB | - | 按需 |
root | - | - | 64GB | xfs | 必须 |
home | /home | /home | 30GB | xfs | 按需 |
第三章:系统服务
系统服务名称 | 服务描述 | 默认安装 | 建议 | 开启条件 |
crond.service | 定时后台执行任务调度 | 是 | 开启 | - |
getty@.service | 终端服务 | 是 | 开启 | - |
irqbalance.service | 多处理器系统中分布硬件中断服务 | 是 | 开启 | - |
kdump.service | 内核故障转储服务 | 是 | 开启 | 需要内核故障诊断信息搜集时打开 |
kpatch.service | 启动时加载内核 patch 模块 | 是 | 开启 | 在有热补丁时使用 |
mcelog.service | 硬件报警日志服务 | 是 | 关闭 | 物理机环境开启(虚机不开启) |
rsyslog.service | 系统日志服务 | 否 | 开启 | - |
sshd.service | ssh 服务 | 是 | 开启 | - |
sysstat.service | 系统状态统计服务 | 否 | 开启 | - |
dm-event.socket | device-mapper 设备事件 | 是 | 关闭 | 系统使用 device mapper 设备 |
autovt@.service | 虚拟终端 | 是 | 开启 | - |
abrt-ccpp.service | C / C ++ 问题收集 | 否 | 关闭 | 需要 abrt 提交时打开 |
abrtd.service | 自动 bug 报告服务 | 否 | 关闭 | 需要 abrt 提交时打开 |
abrt-oops.service | 内核 oops 异常信息收集工具 | 否 | 关闭 | 需要 abrt 提交时打开 |
abrt-pstoreoops.service | 存储 oops 信息服务 | 否 | 关闭 | 需要 abrt 提交时打开 |
abrt-vmcore.service | vmcore 文件复制和处理服务 | 否 | 关闭 | 需要 abrt 提交时打开 |
abrt-xorg.service | xorg 信息异常收集 | 否 | 关闭 | 需要 abrt 提交时打开 |
arp-ethers.service | 网络信息异常收集 | 是 | 关闭 | 需要 abrt 提交时打开 |
atd.service | at 服务 | 是 | 关闭 | 需要一次调度执行时打开 |
auditd.service | 系统审计服务 | 是 | 开启 | 需要使用审计功能时打开 |
chronyd.service | 时间同步服务 | 是 | 关闭 | ntp 的替代 |
dm-event.service | device mapper 事件服务 | 是 | 关闭 | 使用 device mapper 设备时打开 |
ebtables.service | 网桥过滤服务 | 是 | 关闭 | 链路层过滤规则需要时打开 |
firewalld.service | 防火墙服务 | 是 | 关闭 | 需要防火墙规则时打开 |
fstrim.timer | ssd 磁盘 TRIM 服务 | 是 | 关闭 | SSD 磁盘 TRIM 时打开 |
gssproxy.service | GSSAPI 代理服务 | 否 | 关闭 | rpc.svcgssd 替代,需要 GSSAPI 认证时打开 |
iprdump.service | IBM Power RAID 适配器 dump 服务 | 是 | 关闭 | 虚机均关闭 |
iprinit.service | IBM Power RAID 适配器初始化服务 | 是 | 关闭 | 虚机均关闭 |
iprupdate.service | IBM Power RAID 适配器更新服务 | 是 | 关闭 | 虚机均关闭 |
iprutils.target | IBM Power RAID 适配器管理服务 | 是 | 关闭 | 虚机均关闭 |
ipsec.service | IPSec 服务 | 否 | 关闭 | 需要 IPSec 安全协议时打开 |
kexec.target | 通过 kexec 重启 kexec 加载内核 | 是 | 关闭 | 使用 kexec 操作内核时激活重启加载的内核 |
libstoragemgmt.service | 存储管理库 lsmd 服务 | 是 | 关闭 | 需要管理支持的 SAN 和 RAID 卡时打开,虚机均关闭 |
lvm2-lvmpolld.service | lvm2 的轮询守护进程 | 是 | 关闭 | use_lvmpolld 功能时打开 |
lvm2-monitor.service | lvm2 的 mirror 监控进程 | 是 | 关闭 | 需要 lvm2 监控进程时打开 |
mdmonitor.service | MD 软件 RAID 监控进程 | 是 | 关闭 | 采用 md 软件 raid 时打开 |
microcode.service | 硬件微代码更新服务 | 是 | 关闭 | 微码更新时打开 |
nfs-blkmap.service | 并行 NFS 服务进程 | 否 | 关闭 | pnfs 时打开 |
nfs-server.service | nfs server 服务 | 否 | 关闭 | nfs server 提供服务时打开 |
nfs-client.target | Nfs client 服务 | 否 | 关闭 | nfs client 提供服务时打开 |
plymouth* | 图卡渲染服务 | 否 | 关闭 | 需要图卡直接渲染功能时打开 |
pmcd.service | 性能指标搜集服务 | 否 | 关闭 | 使用 pcp 获取性能参数时打开 |
pmie.service | 性能指标接口服务 | 否 | 关闭 | 使用 pcp 获取性能参数时打开 |
pmlogger.service | 性能指标日志服务 | 否 | 关闭 | 使用 pcp 获取性能参数时打开 |
pmproxy.service | 性能指标代理服务 | 否 | 关闭 | 使用 pcp 获取性能参数时打开 |
powertop.service | 电源管理服务 | 否 | 关闭 | 诊断电源消耗及电源管理时打开 |
psacct.service | 内核进程计数服务 | 是 | 关闭 | 需要统计进程计数及活动情况时打开 |
rasdaemon.service | RAS 日志服务 | 否 | 关闭 | 需要 RAS 管理服务时打开 |
ras-mc-ctl.service | RAS 内存控制服务 | 否 | 关闭 | 需要 RAS 管理任务时打开 |
rdisc.service | ICMP 路由发现服务 | 是 | 关闭 | 需要 ICMP 路由服务时打开 |
named.service | DNS Server 服务 | 否 | 关闭 | 需要 DNS 服务时打开 |
rngd.service | 硬件 RNG 收集器服务 | 否 | 关闭 | 需要 RNG 收集服务时打开 |
rpc-rquotad.service | RPC 磁盘配额服务 | 否 | 关闭 | 远程磁盘配额服务 |
rsyncd.service | 远程同步服务 | 否 | 关闭 | 提供远程同步服务时打开 |
smartd.service | 智能卡服务 | 是 | 关闭 | 需要智能卡时打开 |
snmpd | snmp 服务 | 否 | 关闭 | 需要 snmp 服务时打开 |
tcsd.service | TPM 设备用户空间进程服务 | 是 | 关闭 | 需要 TPM 设备时打开 |
tuned.service | 监视系统组件使用情况并动态调整系统设置的服务 | 是 | 关闭 | 需要 tuning profile 时打开 |
xinetd.service | 超级服务 | 否 | 关闭 | 需要 xinetd 管理的服务时打开 |
postfix | 邮件服务 | 否 | 关闭 | - |
NetworkManager.service | 网络管理 | 是 | 开启 | - |
systemd-hibernate.service | 系统休眠 | 是 | 关闭 | - |
rdma-hw.target | RDMA | 是 | 关闭 | 有 RDMA 硬件时开启 |
Systemd-journald | 日志服务 | 是 | 开启 | Stroage 配置建议保持默认(不做修改,默认是 auto),同时建议部署时创建日志目录(如不创建,则默认使用内存保存日志),减少日志导致的内存占用。 mkdir -p /var/log/journal/ |
第四章:操作系统核心内核参数设置
分类 | 参数 | 默认值 | 建议值 | 说明 |
系统全局 | 运行级别 | multi-user(3) | multi-user(3) | 建议使用文本界面,如需图形界面,需单独安装相应组件,并设置运行级别为5 |
data seg size | Unlimited | Unlimited | - | - |
File size | Unlimited | Unlimited | - | - |
Open file | 1024 | 65535 | - | - |
Message queues | 819200 | 819200 | - | - |
Stack size | 8192 | 8192 | - | - |
Max user processes | 14896 | 65535 | - | - |
/etc/selinux/config | enforcing | disabled | 基于安全优先原则,Selinux 默认开启。如需关闭:修改 /etc/selinux/config 为 disabled 后,需要重启才能生效;若需立即生效需执行 setenforce 0 | - |
内存 | vm.swappiness | 30 | 10 | 表示激活 swap 之前空闲内存的百分比。 该值越低,使用的 swap 越少,物理内存中保留的内存页面就越多。 |
vm.dirty_background_ratio | 10 | 10 | 当文件系统缓存脏页数量达到系统内存的 dirty_background_ratio% 时就会触发后台回写进程运行,将一定缓存的脏页异步地刷入磁盘(异步 writeback) | - |
vm.dirty_ratio | 30 | 30 | 当文件系统缓存脏页数量达到系统内存 dirty_ratio%,系统开始处理缓存脏页(同步 writeback) | - |
调度 | kernel.sched_min_granularity_ns | 10000000 | 10000000 | 表示某个运行队列上进程数大于 sched_nr_latency 时,调度周期 = sched_min_granularity_ns 乘以进程数 |
kernel.sched_latency_ns | 18000000 | 18000000 | 表示某个运行队列上进程数小于 sched_nr_latency 时的调度周期 | - |
kernel.sched_migration_cost_ns | 500000 | 500000 | - | - |
网络 | net.ipv4.tcp_keepalive_time | 7200 | 120 | 表示某个 TCP 连接在空闲多少秒后,内核才发起探测 |
net.ipv4.tcp_retries2 | 15 | 5 | - | - |
net.ipv4.tcp_syn_retries | 6 | 2 | - | - |
net.ipv4.tcp_keepalive_probes | 5 | 5 | 表示 TCP 连接空闲一段时间后,内核发起探测,探测多少次不成功内核才发起RST。 | - |
net.ipv4.tcp_keepalive_intvl | 15 | 15 | 每次探测的间隔 | - |
net.ipv4.ip_local_port_range | 32768 60999 | 20000 65535 | - | - |
net.ipv4.ip_forward | 0 | 0 | - | ·- |
net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 | - | - | - | - |
调测 | kernel.printk | 3 4 1 7 | 5 | “3 4 1 7” 4个值分别对应: (1) 控制台日志级别:优先级高于该值的消息将被打印至控制台。 (2) 缺省的消息日志级别:将用该值来打印没有优先级的消息。 (3) 最低的控制台日志级别:控制台日志级别可能被设置的最小值。 (4) 缺省的控制台:控制台日志级别的缺省值。 “5” 对应KERN_NOTICE /* normal but significant */。 |
kernel.hung_task_panic | 0 | 0 | - | - |
kernel.panic_on_oops | 1 | 1 | - | - |
kernel.panic_on_rcu_stall | 0 | 0 | - | - |
kernel.softlockup_panic | 0 | 1 | - | - |
vm.panic_on_oom | 0 | 0 | - | - |
第五章:网络密集型业务场景最佳配置实践
实例:QQ 核心业务上云场景。该业务是网络密集型业务,最初上云时出现性能不达标。在深入分析业务瓶颈后,重点针对网络部分进行配置调优,达到了性能要求。其网络内核配置优化如下:(供类似业务场景参考)
数据库场景默认要64k以上,默认配置是64k所以本身可以适用于大部分场景,业务场景这里又调大了一倍 | kernel.msgmnb = 131072 |
缓冲区设置都比默认要大,udp 未做调整,这里可根据客户业务再适配 | net.core.rmem_default = 10000000 net.core.rmem_max = 10000000 net.core.wmem_default = 10000000 net.core.wmem_max = 10000000 net.ipv4.tcp_rmem = 30000000 30000000 30000000 net.ipv4.tcp_wmem = 30000000 30000000 30000000 |
默认是 4096,这里评估如果需要调整的话,需要同时调整 net.core.netdev_max_backlog 和net.ipv4.tcp_max_syn_backlog | net.core.somaxconn = 65535 |
默认为30s | net.ipv4.ipfrag_time = 15 |
默认为32768 - 60999 | net.ipv4.ip_local_port_range = 21000 61000 |
默认为1,可能会丢包。这里可能需要根据客户业务场景对安全性一类的要求再评估。 | net.ipv4.conf.all.rp_filter = 0 |
默认为6 | net.ipv4.tcp_syn_retries = 3 |
默认为2,这里可以根据业务模型短链接的情况评估下 | net.ipv4.tcp_tw_reuse = 1 |
默认为60 | net.ipv4.tcp_fin_timeout = 30 |
默认为0,需评估网络环境 | net.ipv4.tcp_orphan_retries = 3 |
默认是7200 | net.ipv4.tcp_keepalive_time = 840 |
默认是75,业务场景这里是缩短链接维持时间并增加探测频率 | net.ipv4.tcp_keepalive_intvl = 15 |
默认是5 | net.ipv4.tcp_synack_retries = 2 |
默认是262144 | net.ipv4.tcp_max_orphans = 524288 |
默认是1,0会提速,内网环境应该 OK | net.ipv4.tcp_slow_start_after_idle = 0 |
默认是0 | net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 |
第六章:其他系统配置说明
TencentOS Server 3 兼容 CentOS8,网络管理默认使用 networkmanager 系统(与 CentOS7 基于 network-scripts 工具有较大差异),建议使用 nmcli 工具管理网络,示例如下:
nmcli con mod eth0 ipv4.addresses "172.17.1.222/24"nmcli con mod eth0 ipv4.gateway "172.17.0.1"nmcli con mod eth0 ipv4.dns "172.17.0.221 172.17.0.220"nmcli con mod eth0 ipv4.method manualnmcli con mod eth0 connection.autoconnect yes