Easton's Blog Easton's Blog
首页
  • 编程语言

    • Python
  • 框架

    • Django
  • Mdn (opens new window)
  • HTML
  • CSS
  • JavaScript
  • Mysql
  • PostgreSQL
  • Elasticsearch
  • MongoDB
  • Redis
  • 服务器命令
  • Docker
  • GIT
  • 摄影
  • 草稿
  • 归类方式

    • 分类
    • 标签
    • 归档
  • 关于博客

    • 博客教程
    • 友情链接
    • 关于
导航站
GitHub (opens new window)

Easton Yang

爱生活😊爱学习
首页
  • 编程语言

    • Python
  • 框架

    • Django
  • Mdn (opens new window)
  • HTML
  • CSS
  • JavaScript
  • Mysql
  • PostgreSQL
  • Elasticsearch
  • MongoDB
  • Redis
  • 服务器命令
  • Docker
  • GIT
  • 摄影
  • 草稿
  • 归类方式

    • 分类
    • 标签
    • 归档
  • 关于博客

    • 博客教程
    • 友情链接
    • 关于
导航站
GitHub (opens new window)
  • 服务器命令

    • vim
    • shell快捷键
    • linux常用命令
    • systemctl
    • tcpdump抓包
    • linux性能分析
      • 影响 linux 服务器性能的因素
        • CPU
        • 内存
        • 磁盘 IO
        • 网络
      • 常用的 linux 系统性能监控的命令
        • uptime(系统整体性能评估)
        • cpu 的性能评估
        • 利用 vmstat 命令监控 cpu
        • 利用 sar 命令监控系统 cpu
        • 内存性能评估
        • 利用 free 指令监控内存
        • 利用 vmstat 监控内存
        • 磁盘 IO 性能评估
        • iostat
        • 利用 sar 评估磁盘性能
        • 网络性能评估
      • 文章来源
  • Docker

  • 服务器
  • 服务器命令
eastonyangxu
2023-09-05
目录

linux性能分析

# 影响 linux 服务器性能的因素

# CPU

描述

CPU 是操作系统稳定运行的根本,CPU 的速度与性能在很大程度上决定了系统整体的性能,因此,CPU 数量越多、主频越高,服务器性能也就相对越好。

# 内存

描述

内存的大小也是影响 Linux 性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,导致资源浪费。

# 磁盘 IO

描述

磁盘的 I/O 性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘 I/O 性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高 I/O 性能,比如常见的磁盘 RAID 技术。

# 网络

描述

Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,现在的网络一般都是千兆带宽或光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。

# 常用的 linux 系统性能监控的命令

# uptime(系统整体性能评估)

uptime 这里需要注意的是:load average 这个输出值,这三个值的大小一般不能大于系统 CPU 的个数。

那么如何查看 cpu 的个数呢?

查看系统 cpu 的信息:cat /proc/cpuinfo中的信息,其中 cpu cores 即为 cpu 的核数。

也可以用 cat /proc/cpuinfo |grep "cores"|uniq 直接查看。

[root@test ~]# cat /proc/cpuinfo |grep "cores"|uniq
cpu cores    : 2
1
2

# cpu 的性能评估

# 利用 vmstat 命令监控 cpu

vmstat 2 10 (每 2 秒监控一次 监控 10 次) vmstat

procs r 表示运行和等待 cpu 时间片的进程数,这个值如果长期大于 cpu 的个数,则需要增加系统 cpu。
b 表示等待资源的进程数。

CPU us 列显示了用户进程消耗 CPU 时间百分比,us 比较高的时候,说明用户进程消耗 cpu 的时间多,如果长期大于 50%,就需要优化程序和算法。
sy 列显示了内核进程消耗的 cpu 时间百分比,sy 值较高的时候,说明内核消耗的 cpu 资源很多。
根据经验,us+sy 的参考值为 80%,如果 us+sy 大于 80%说明可能存在 CPU 资源不足。

# 利用 sar 命令监控系统 cpu

sar 命令会增加系统开销 但是影响不大,yum install sysstat 安装 sar 命令

sar -u 3 5(u 显示系统所有 cpu 在采样时间内的负载状态) sar %user:用户进程消耗 cpu 的时间百分比
%nice:运行正常进程所消耗 cpu 的百分比
%system:系统消耗 cpu 时间百分比
%iowait:IO 等待所占用 cpu 时间百分比
%steal:内存在相对紧张的环境下 pagein 强制对不同页面进行的 steal 操作
%idle:cpu 处在空闲时间的百分比

# 内存性能评估

# 利用 free 指令监控内存

free -m 查看以 M 为单位的内存使用情况 free 一般有这样一个经验公式:
应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能。
应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存。
20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

# 利用 vmstat 监控内存

vmstat swpd 表示切换到内存交换去的内存数量(k),如果 swpd 的值不为 0,或者比较大,但是 si,so 的值长期为 0,这种情况不用担心,不会影响性能。
free 表示空闲的物理内存数量。
buff 表示 buffers cache 的内存数量,一般对设备的读写才需要缓冲。
cache 表示 page cached 的内存数量。一般作为文件系统 cached,频繁访问的文件都会被 cached,如果 cache 值较大,说明 cached 的文件较多,如果此时 IO 中的 bi 比较小,说明文件系统效率比较好。
si 表示由磁盘调入内存,也就是内存进入内存交换区的数量。
so 表示由内存调入磁盘,也就是内存交换区进入内存的数量。
一般情况下,so si 的值都为 0。如果 si so 的值长期不为 0,则表示系统内存不足,需要增加内存。

# 磁盘 IO 性能评估

# iostat

iostat kB_reads/s 每秒读取的数据块数。
kB_wrtn/s 每秒写入的数据块数。
KB_read 读取的所有块数。
KB_wrtn 写入的所有块数。
这几个值没有标准 如果长期都很大 肯定是不正常的。

# 利用 sar 评估磁盘性能

sar-d await 平均每次设备 I/O 操作的等待时间(毫秒)。
svctm 平均每次设备 I/O 操作的服务时间(毫秒)。
%util 一秒中有百分之几的时间用于 I/O 操作。

评判标准

正常情况下 svctm 应该是小于 await 的,svctm 的值和磁盘性能,cpu 内存等都有关系。

如果 svctm 的值和 await 的值相近表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm,表示 I/O 队列等待时间太长,系统上的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。

%util 越小越好,如果%util 接近 100%表示磁盘产生的 I/O 请求太多,I/O 系统已经满负载在工作,此时可以通过优化程序或者更换更快的磁盘来解决问题。

# 网络性能评估

通过 ping 命令检测网络的连通性。

通过 netstat -i 组合检测网络接口状况。

通过 netstat -r 组合检测系统路由表信息。

通过 sar -n 组合显示系统的网络运行状态(sar -n DEV 5 3)。

查看 tcp 连接数最多的 ip:

sudo netstat -pant | grep ":22" | awk '{print $5}' | awk -F":" '{print $4}' |sort|uniq -c|sort -nr
1

命令解释

awk -F":" '{print $4}' 表示把结果的第 4 列用:号分割

sort -nr 排序,-n 以数值大小排序,-r 倒序,从大到小。

uniq -c 删除重复的行,-c 表示加上每行出现的次数。

netstat 命令是一个监控 TCP/IP 网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

netstat -pant

-p :显示正在使用 Socket 的程序识别码和程序名称;

-a :显示所有连线中的 Socket;

-n :直接使用 ip 地址,而不通过域名服务器;

-t :显示 TCP 传输协议的连线状况。

提取访问 nginx 服务器最多的 10 个 ip:

cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n10
1

# 文章来源

原文章 (opens new window)

#服务器
上次更新: 2023/09/05, 16:32:19
tcpdump抓包
Docker介绍

← tcpdump抓包 Docker介绍→

最近更新
01
攻略制作要点
07-18
02
摄影主题拍摄
07-18
03
延时摄影剧本
07-18
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Easton Yang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式