IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux服务器卡顿如何排查 -> 正文阅读

[系统运维]Linux服务器卡顿如何排查

一、背景

在一次测试中发现服务器非常卡顿,刚开始任务是网络问题导致,可是别人的服务却可以正常运行,于是进行了一些列排查。

二、排查步骤

2.1 查看内存使用情况

## -g表示单位是G,-m 表示单位是m
free -g

在这里插入图片描述

2.2 查看磁盘使用情况

df -h

查看磁盘的 已用 情况是否过高。
在这里插入图片描述

2.3 查看磁盘IO使用情况

## 1 表示没1s刷新一下
iostat -x 1
## 查看磁盘列表
lsblk

查看磁盘的io情况是否使用过高。
在这里插入图片描述

2.4 查看cpu使用情况,类似于Windows的任务管理器

top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:★通过指定监控进程ID来仅仅监控某个进程的状态。
q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c:★显示整个命令行而不只是显示命令名。

## 显示整个命令行而不只是显示命令名。
top -c
## 
## 显示进程号为xxx的信息
top -p XXXX

在这里插入图片描述

2.4.1 第一行:系统运行时间和平均负载

top - 08:43:13 up 8 days, 19:11, 7 users, load average: 1.55, 1.41, 1.25

系统时间:08:43:13
运行时间:up 8 days,
当前登录用户:  7 user
负载均衡(uptime)  load average: 0.00, 0.00, 0.00
     average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

2.4.2 第二行:任务(进程)统计信息

Tasks: 661 total, 1 running, 660 sleeping, 0 stopped, 0 zombie

总进程:661 total, 运行:1 running, 休眠:660 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

2.4.3 第三行:cpu状态信息

这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示:
%Cpu(s): 1.9 us, 1.2 sy, 0.0 ni, 96.6 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st

1.9 us【user space】— 用户空间占用CPU的百分比。
1.2 sy【sysctl】— 内核空间占用CPU的百分比。
0.0 ni【niced】— 改变过优先级的进程占用CPU的百分比
96.6 id【idolt】— 空闲CPU百分比
0.2 wa【wait】— IO等待占用CPU的百分比
0.0 hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0 st【Software Interrupts】— 软中断占用CPU的百分比

2.4.4 第四行:内存状态

1003020k total【物理内存】,   234464k used【使用中的内存】,   777824k free【空闲内存】,    24084k buffers【缓存的内存量】

2.4.5 第五行:swap交换分区

2031612k total【交换区总量】,      536k used【使用的交换区总量】,  2031076k free【空闲交换区总量】,   505864k cached【缓冲的交换区总量】

备注: 可用内存=free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心

2.4.6 空行

2.4.7 各进程(任务)的状态监控

在这里插入图片描述

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — `上次更新到现在的CPU时间占用百分比`
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

详解
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来

DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

2.4.8 top内部命令如下:

f/F – ★添加或删除top中的显示字段
n – ★设置在进程列表所显示进程的数量
s – ★改变画面更新周期,单位时秒
P – ★以 CPU 占用率大小的顺序排列进程列表
K – ★终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
c – ★切换显示命令名称和完整命令行。
o或者O:改变显示项目的顺序
l – 关闭或开启第一部分第一行 切换显示平均负载和启动时间信息。
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示切换显示进程和CPU状态信息。
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示切换显示内存信息。
N – 排序【PID】以PID的大小的顺序排列表示进程列表
M – 排序【内存占用率】以大小的顺序排列进程列表
T – 排序【根据时间/累计时间进行】
i:忽略闲置和僵死进程。这是一个开关式命令。
S:切换到累计模式。
h – 显示帮助
q – 退出 top
W:将当前设置写入~/.toprc文件中。
1 – 数字1 按数字“1”可监控每个逻辑CPU的状况
b – 打开/关闭运行线程【R状态】的加亮效果
x – 打开/关闭运行线程【R状态】排序列的加亮效果
”shift + >”或”shift + < :★可以向右或左改变排序列

2.4.9 其他与cup相关的命令

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

# 查看详细内存信息
cat /proc/meminfo

# 监控java线程数:
ps -eLf | grep java | wc -l

# 监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l

2.5 查看网络情况 iftop

2.5.1 安装iftop

官方网站:http://www.ex-parrot.com/~pdw/iftop/
下载与安装:

## 第一步:找个合适的位置下载
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
## 第二步:解压
tar zxvf iftop-0.17.tar.gz
## 第三步:打开路径
cd iftop-0.17
## 第四步:运行配置
./configure
## 第五步:安装
make && make install

2.5.2 监听效果

iftop

在这里插入图片描述

2.5.3 iftop参数说明

1》iftop 界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

2》iftop 命令的相关参数
最佳实战命令:iftop -nPm 20M 显示ip,端口,最大刻度20M
在这里插入图片描述

-i ★设定监测的网卡,如:# iftop -i eth1

-n ★使host信息默认直接都显示IP,如:# iftop -n

-P ★显示端口;

-m ★设置界面最上边的刻度的最大值,刻度分五个大段显示【指定为带有“K”、“M”或“G”后缀的数字。】,例:# iftop -m 100

-F ★显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-h(display this message),帮助,显示参数信息

-p 以混杂模式运行,因此不直接通过指定接口的通信量也被计算在内

-b 使流量图形条默认就显示;

-f 滤波器代码,使用筛选代码选择要计数的数据包。只对IP数据包进行计数,因此指定的代码计算为(筛选代码)和IP;

-l 显示和统计发送到链路本地IPv6地址或来自链路本地IPv6地址的数据报。默认情况下,不显示该地址类别。

-G net6/mask6指定用于流量分析的IPv6网络。mask6的值可以作为前缀长度或数字地址字符串给出,用于更复杂的位掩码。

-c 配置文件指定备用配置文件。如果未指定,iftop将使用~/.IFTOPC(如果存在)。有关配置文件的说明

-t 文本输出模式

3》进入iftop画面后的一些操作命令(注意大小写)

按h ★切换是否显示帮助;
按P ★切换暂停/继续显示;
按n ★切换显示本机的IP或主机名;
按B ★切换计算2秒或10秒或40秒内的平均流量;
按T ★切换是否显示每个连接的总流量;
按l ★L打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t ★切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N ★切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按b切换是否显示平均流量图形条;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k ★可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;<根据左边的本机名或IP排序;>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 09:15:07  更:2021-11-26 09:17:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:39:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码