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线上环境问题排查命令

Linux线上环境问题排查命令

一、内存瓶颈

1.1、free

free :是查看内存使用情况,包括物理内存、交换内存 (swap) 和内核缓冲区内存。

free -h -s 3: 表示每隔三秒输出一次内存情况,命令如下
在这里插入图片描述

  • Men: 是内存的使用情况。
  • Swap: 是交换空间的使用情况。
  • total: 系统总的可用物理内存和交换空间大小。
  • used: 已经被使用的物理内存和交换空间。
  • free: 还有多少物理内存和交换空间可用使用,是真正尚未被使用的物理内存数量
  • shared: 被共享使用的物理内存大小。
  • buff/cache: 被 buffer(缓冲区) 和 cache(缓存) 使用的物理内存大小。
  • available: 还可以被应用程序使用的物理内存大小,它是从应用程序的角度看到的可用内存数量,available ≈ free + buffer + cache

交换空间:(swap space)

swap space 是磁盘上的一块区域,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。


1.2、vmstat

vmstat: (VirtualMeomoryStatistics,虚拟内存统计)是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视,推荐使用。

vmstat 5 3: 表示每隔 5 秒统计一次,一共统计三次。

  • procs

    • r: 表示运行和等待 CPU 时间片的进程数(就是说多少个进程真的分配到 CPU),这个值如果长期大于系统 CPU 个数,说明 CPU 不足,需要增加 CPU
    • b: 表示在等待资源的进程数,比如正在等待 I/O 或者内存交换等。
  • memory

    • swpd: 表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位 KB),如果大于 0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
    • free: 表示当前空闲的物理内存。
    • buff: 表示缓冲大小,一般对块设备的读写才需要缓冲 。
    • cache: 表示缓存大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果 cache 值非常大说明缓存文件比较多,如果此时 io 中的 bi 比较小,说明文件系统效率比较好。
  • swap

    • si: 表示数据由磁盘读入内存;通俗的讲就是每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
    • so: 表示由内存写入磁盘,也就是由内存交换区进入内存的数据大小。
    • 【注意】: 一般情况下 si、so 的值都为 0,如果 si、so 的值长期不为 0,则说明系统内存不足,需要增加系统内存。
  • io

    • bi: 表示由块设备读入数据的总量,即读磁盘,单位 kb/s 。
    • bo: 表示写到块设备数据的总量,即写磁盘,单位 kb/s。
    • 【注意】: 如果 bi+bo 的值过大,且 wa 值较大,则表示系统磁盘 IO 瓶颈。
  • system

    • in: 表示某一时间间隔内观测到的每秒设备终端数。
    • cs: 表示每秒产生的上下文切换次数,这个值要越小越好,太大了,要考虑调低线程或者进程的数目
    • 【案例】 例如在 apache 和 nginx 这种 web 服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择 web 服务器的进程可以由进程或者线程的峰值一直下调,压测,直到 cs 到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的 CPU 大部分浪费在上下文切换,导致 CPU 干正经事的时间少了,CPU 没有充分利用,是不可取的。
    • 【注意】 这两个值越大,则由内核消耗的 CPU 就越多。
  • CPU

    • us: 表示用户进程消耗的 CPU 时间百分比,us 值越高,说明用户进程消耗 CPU 时间越多,如果长期大于 50%,则需要考虑优化程序或者算法
    • sy: 表示系统内核进程消耗的 CPU 时间百分比,一般来说 us+sy 应该小于 80%,如果大于 80%,说明可能存在 CPU 瓶颈
    • id: 表示 CPU 处在空间状态的时间百分比。
    • wa: 表示 IP 等待所占用的 CPU 时间百分比,wa 值越高,说明 I/O 等待越严重,根据经验 wa 的参考值为 20%,如果超过 20%,说明 I/O 等待严重,引起 I/O 等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者监控器的贷款瓶颈(主要是块操作)造成的

二、CPU瓶颈

2.1、查看机器cpu核数

CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 
总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
  • 查看cpu信息(型号)
    • 命令:
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

在这里插入图片描述

  • 查看物理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

在这里插入图片描述


2.2、top

概述: 在 Linux 内核的操作系统中,进程是根据虚拟运行时间(由进程优先级、nice 值加上实际占用的 CPU 时间进行动态计算得出)进行动态调度的。在执行进程时,需要从用户态转换到内核态,用户空间不能直接操作内核空间的函数。通常要利用系统调用来完成进程调度,而用户空间到内核空间的转换通常是通过软中断来完成的。例如要进行磁盘操作,用户态需要通过系统调用内核的磁盘操作指令,所以 CPU 消耗的时间被切分成用户态 CPU 消耗、系统(内核) CPU 消耗,以及磁盘操作 CPU 消耗。执行进程时,需要经过一系列的操作,进程首先在用户态执行,在执行过程中会进行进程优先级的调整(nice),通过系统调用到内核,再通过内核调用,硬中断、软中断,让硬件执行任务。执行完成之后,再从内核态返回给系统调用,最后系统调用将结果返回给用户态的进程。

top命令下的快捷键

  • Shift + H: 显示 java 线程 ;
  • Shift + M: 按照内存使用排序 ;
  • Shift + P: 按照 CPU 使用时间(使用率)排序;
  • Shift + T: 按照 CPU 累积使用时间排序 ;

在这里插入图片描述

第一行15:24:11 up 8 days, 7:52, 1 user, load average: 5.73, 6.85, 7.33

  • 15:24:11 系统时间,

  • up 8 days 运行时间,

  • 1 user 当前登录用户数,

  • load average 负载均衡情况,分别表示 1 分钟,5 分钟,15 分钟负载情况。

第二行Tasks: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie

  • 总进程数 17,
  • 运行数 1,
  • 休眠 16,
  • 停止 0,
  • 僵尸进程 0;

第三行%Cpu(s): 13.9 us, 9.2 sy, 0.0 ni, 76.1 id, 0.1 wa, 0.0 hi, 0.1 si, 0.7 st

  • 用户空间 CPU 占比 13.9%
  • 内核空间 CPU 占比 9.2%
  • 改变过优先级的进程 CPU 占比 0%
  • 空闲 CPU 占比 76.1
  • IO 等待占用 CPU 占比 0.1%
  • 硬中断占用 CPU 占比 0%
  • 软中断占用 CPU 占比 0.1%,
  • 当前 VM 中的 cpu 时钟被虚拟化偷走的比例 0.7%

第四行和第五行表示内存和 swap 区域的使用情况。

第七行

  • PID: 进程 id
  • USER: 进程所有者
  • PR: 进程优先级
  • NI:nice 值(进程执行的优先级)。负值表示高优先级,正值表示低优先级;
  • VIRT: 虚拟内存,进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
  • RES: 常驻内存,进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
  • SHR: 共享内存,共享内存大小,单位 kb
  • S: 进程状态:
    • D = 不可中断的睡眠状态
    • R = 进程处于运行或就绪状态
    • S = 睡眠
    • T = 跟踪 / 停止
    • Z = 僵尸进程
    • B = 进程正在等待更多的内存页
    • I = 空闲状态(idle)
    • O = 进程正在处理器运行,这个状态从来木见过.
  • %CPU: 上次更新到现在的 CPU 时间占用百分比
  • %MEM : 进程使用的物理内存百分比
  • TIME+ : 进程使用的 CPU 时间总计,单位 1/100 秒
  • COMMAND : 进程名称(命令名 / 命令行)

计算在 cpu load 里面的 uninterruptedsleep 的任务数量: 命令如下:

top -b -n 1 | awk '{if (NR<=7)print;else if($8=="D"){print;count++}}END{print "Total status D:"count}'

在这里插入图片描述

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:56:15-

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