调整内核参数可以根据具体情况来进行,以下是一些常见的内核参数调优建议:
- 文件描述符限制:
- 文件描述符是操作系统用于跟踪打开的文件和套接字的标识符,如果系统中打开的文件数量超过了文件描述符的限制,可能会导致应用程序无法正常工作。可以通过修改以下两个参数来调整文件描述符限制:
fs.file-max
:系统中最大文件描述符数量。fs.nr_open
:单个进程可以打开的最大文件描述符数量。
- 文件描述符是操作系统用于跟踪打开的文件和套接字的标识符,如果系统中打开的文件数量超过了文件描述符的限制,可能会导致应用程序无法正常工作。可以通过修改以下两个参数来调整文件描述符限制:
(base) [base@pre ~]$ cat /proc/sys/fs/file-max
791734
(base) [base@pre ~]$ cat /proc/sys/fs/nr_open
1048576
-
TCP 参数调优:
- 在高负载网络环境下,可以通过调整 TCP 参数来优化网络性能,例如:
net.core.somaxconn
:TCP 连接队列的最大长度,增加这个值可以减少连接被拒绝的可能性。net.ipv4.tcp_max_syn_backlog
:TCP SYN 队列的最大长度,增加这个值可以防止 SYN 攻击。net.ipv4.tcp_syncookies
:启用 SYN Cookie 机制,防止 SYN 攻击。net.ipv4.tcp_fin_timeout
:TCP 连接的 FIN-WAIT-2 状态超时时间,可以减少 FIN-WAIT-2 状态连接的数量。
- 在高负载网络环境下,可以通过调整 TCP 参数来优化网络性能,例如:
-
内存管理参数:
- 在高内存使用情况下,可以调整一些内存管理参数来优化系统性能,例如:
vm.swappiness
:调整交换空间的使用倾向。vm.dirty_ratio
和vm.dirty_background_ratio
:控制脏页面在内存中的比例,影响脏数据写入磁盘的时机。
- 在高内存使用情况下,可以调整一些内存管理参数来优化系统性能,例如:
-
网络参数:
- 可以根据网络负载情况来调整一些网络相关的参数,例如:
net.ipv4.tcp_keepalive_time
:TCP keepalive 时间,控制空闲连接的保持时间。net.core.netdev_max_backlog
:网络接口队列的最大长度,增加这个值可以处理更多的网络数据包。
- 可以根据网络负载情况来调整一些网络相关的参数,例如:
-
其他参数:
- 还有许多其他的内核参数可以调整,如进程调度、IO 调度等,具体可以根据系统的实际情况来进行调优。
在调整内核参数之前,建议先备份相关配置文件,并且逐个调整参数并测试系统的性能变化,以确保调整不会引起意外情况或影响系统稳定性。
当 Linux 服务器出现高负载问题?
当 Linux 服务器出现高负载问题,但内存和 CPU 使用率正常时,可能有多种原因导致,以下是一些可能的排查步骤和解决方法:
-
检查负载平均值:
- 运行
uptime
或top
命令来查看负载平均值。负载平均值表示在过去 1、5、15 分钟内有多少个进程在等待 CPU 时间。一般来说,负载平均值超过 CPU 核心数的 70% 左右可能就是高负载了。
- 运行
-
查看进程列表:
- 运行
top
或htop
命令,按照 CPU 或内存使用率排序查看哪些进程占用资源较多。
- 运行
-
IO 瓶颈:
- 使用
iotop
命令检查 IO 使用情况,可能有进程在进行大量的磁盘读写操作,导致磁盘 IO 成为瓶颈。
- 使用
-
网络瓶颈:
- 使用
iftop
或nload
命令检查网络使用情况,检查是否有大量的网络流量导致网络成为瓶颈。
- 使用
-
查看系统日志:
- 检查系统日志文件(如
/var/log/syslog
、/var/log/messages
)中是否有异常报错信息,可能会有一些进程或服务出现异常导致系统负载升高。
- 检查系统日志文件(如
-
检查定时任务:
- 检查系统中是否有定时任务(如 cron 任务)导致负载升高,可能某些任务在运行时消耗了大量资源。
-
检查进程间通信:
- 某些进程可能在进行大量的进程间通信,例如管道、消息队列等,导致系统负载升高。
-
内核参数调整:
- 可能需要调整一些内核参数以优化系统性能,例如调整文件描述符限制、TCP 参数等。
-
应用优化:
- 如果是某个特定应用导致的高负载,可能需要对应用进行优化,例如优化数据库查询、减少不必要的计算等。
-
系统更新:
- 确保系统和软件包都是最新的版本,有时高负载问题可能是由于已知的 bug 或性能问题导致的,更新到最新版本可能会解决问题。
-
硬件故障:
- 最后,虽然 CPU 和内存使用率正常,但仍有可能存在硬件故障,例如硬盘故障、网络接口故障等,可以通过硬件诊断工具进行检查。
通过以上步骤,您应该能够定位到导致 Linux 服务器负载升高的原因,并采取相应的措施来解决问题。
top命令
下面是您提供的 top
命令的输出以及各个部分的参数说明:
-
top - 10:30:40 up 726 days, 15:45, 2 users, load average: 0.07, 0.17, 0.18
10:30:40
: 当前时间。up 726 days, 15:45
: 系统已经运行了726天15小时45分钟。2 users
: 当前登录系统的用户数。load average: 0.07, 0.17, 0.18
: 系统的平均负载,分别表示过去1分钟、5分钟和15分钟的负载平均值。
-
Tasks: 235 total, 1 running, 234 sleeping, 0 stopped, 0 zombie
235 total
: 系统当前总共有235个任务(进程)。1 running
: 其中有1个任务正在运行。234 sleeping
: 其中有234个任务正在睡眠(等待)。0 stopped
: 没有任务被停止。0 zombie
: 没有僵尸进程。
-
%Cpu(s): 1.1 us, 0.8 sy, 0.0 ni, 98.1 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
us
: 用户空间占用CPU的百分比。sy
: 内核空间占用CPU的百分比。ni
: 用于nice进程的CPU时间的百分比。id
: 空闲CPU的百分比。wa
: CPU等待I/O完成的百分比。hi
: CPU处理硬中断(hardware IRQ)的百分比。si
: CPU处理软中断(software IRQ)的百分比。st
: 被虚拟机偷取(steal)的CPU时间的百分比。
-
KiB Mem : 8010192 total, 448660 free, 1835312 used, 5726220 buff/cache
8010192 total
: 物理内存总量。448660 free
: 可用内存。1835312 used
: 已使用内存。5726220 buff/cache
: 缓存的内存(包括用作缓存的内存和用作缓冲区的内存)。
-
KiB Swap: 0 total, 0 free, 0 used. 5695024 avail Mem
0 total
: 交换空间总量。0 free
: 可用交换空间。0 used
: 已使用交换空间。5695024 avail Mem
: 可用于程序的内存量,包括实际可用内存和可以从交换空间中获取的内存。
iotop
在您提供的 iotop
输出中,每一行都代表一个正在运行的进程,以下是每列的参数说明:
- TID: 进程的线程 ID。
- PRIO: 进程的优先级。
- USER: 进程的用户名。
- DISK READ: 进程的磁盘读取速率,以字节/秒为单位。
- DISK WRITE: 进程的磁盘写入速率,以字节/秒为单位。
- SWAPIN: 进程的交换空间使用情况。
- IO>: 进程的 I/O 活动百分比。
- COMMAND: 进程的命令行。
在您的示例中,iotop
显示了正在运行的进程的磁盘 I/O 活动情况,包括它们的读取和写入速率。每一行代表一个进程,包括它的线程 ID、优先级、用户、磁盘读取速率、磁盘写入速率、交换空间使用情况、I/O 活动百分比以及进程的命令行。
对于您提供的示例,第一列显示了每个进程的线程 ID,然后是优先级、用户、磁盘读取速率、磁盘写入速率、交换空间使用情况、I/O 活动百分比和进程的命令行。
iftop 检查网络使用情况
iftop
是一个用于实时监视网络流量的命令行工具,它可以显示当前网络中各个主机之间的数据传输情况。通过 iftop
,您可以查看正在进行的网络连接以及它们的数据传输速率、流量方向等信息。
iftop
的名称来自于 “interactive top”,表明它是一个交互式的类似于 top
命令的工具,但专注于监视网络流量。它的交互式界面允许您实时地查看网络流量情况,并可以通过键盘命令进行各种操作,例如排序、过滤、刷新等。
通过 iftop
,系统管理员可以方便地监视服务器的网络流量,发现网络瓶颈、异常流量等问题,从而进行及时的调整和优化。
以下是您提供的 iftop
输出的解释:
android.aplum.com
和10-2-10-47.pre-product-score-service.pre-aplum-alg
等每一行都代表一个网络连接。- 左侧箭头 (
=>
) 表示数据从左侧的主机(发送方)发送到右侧的主机(接收方)。 - 右侧箭头 (
<=
) 表示数据从右侧的主机(接收方)发送回左侧的主机(发送方)。 10.6Kb
和959b
分别表示发送和接收的数据量,单位为 KB 或 b。cum
表示累积的数据量,peak
表示峰值数据量。TX
表示发送(传出)的数据流量,RX
表示接收(传入)的数据流量。rates
表示流量速率,分别显示平均速率、峰值速率和最大速率。
总结:
- 每一行表示一个网络连接,显示了数据传输的方向和数据量。
- 左箭头 (
=>
) 表示发送方到接收方的流量,右箭头 (<=
) 表示接收方回复的流量。 cum
和peak
分别表示累积数据量和峰值数据量。TX
和RX
表示发送和接收的数据量。rates
列显示了流量速率的平均、峰值和最大值。
通过 iftop
,您可以实时了解网络中的数据流量情况,方便进行网络性能分析和故障排除。