高性能linux服务器运维实战小结 性能调优工具

性能指标

进程指标

进程关系

父进程创子进程时,调fork系统调用。调用时,父给子获取一个进程描述符,并设置新的pid,同事复制父进程的进程描述符给子进程,此时不会复制父进程地址空间,而是父子用相同地址空间。程序执行完成后,子进程调用exit系统调用,会释放大部分数据结构,并通知父进程,此时子进程是僵尸进程,当父进程收到子进程的终止通知后,父进程会清除子进程所有数据结构和进程描述符

进程与线程

线程是进程的实体,是cpu调度和分配的基本单位,线程是比进程更小的独立基本单位

一个线程只能属于一个进程

进程是资源最小分配单位,进程的所有线程共享进程的所有资源,线程不拥有资源

真正运行工作的是线程

线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

进程的线程也可以并发执行

进程优先级和nice级别

一个cpu在同一时间只能执行一个进程

进程优先级可分为动态和静态。内核使用启发式算法决定开或关动态优先级。可通过改nice级别直接改进程静态优先级。nice范围从19到-20,越小优先级越高,默认为0 只有root才能把nice级别调整为负数(高优先)

进程状态

僵尸进程产生原因:子进程终止时从内存中移除,进程描述符仍在内存中,子进程状态变成EXIT_ZOMBIE,向父进程发送SIGCHLD信号,父进程此时应该调用wait调用获取子进程退出状态,wait调用后,僵尸进程则从内存中移除。因此僵尸进程生存期是从子进程终止到父进程调用wait之间,由于部分原因导致父进程不调用wait,就会导致僵尸进程存在

内存指标

物理内存和虚拟内存

虚拟内存是硬盘模拟的内存。内存使用有一个映射,物理内存和逻辑内存都被映射为虚拟内存

页高速缓存页写回机制

页是物理或虚拟内存中一组连续的线性地址,linux内核以页为单位处理内存,页大小常见的有4KB

进程请求页时,若有可用页,则内核直接分配给内存,否则,内核从其他进程或页缓存拿一部分分给该进程

进程请求页时,若页不够,内核会尝试释放特定内存以供使用,此过程是内存回收,kswapd内核线程负责页回收

kswapd在虚拟内存管理中负责换页,os周期唤醒kswapd,它基于最近最少使用原则,在活动页中寻找可回收的页面,看内存是否紧张,若不紧张则睡眠。kswapd有两个阈值,pages_hige pages_low,空闲页低于pages_low时,kswapd进程会扫描内存并每次释放32个空闲页,直到free page数量达到pages_high

内存负载较大时一般会看到两个进程 kswapd0和kswapd1。如果这些进程占资源多,需要考虑优化系统或添加硬件资源

某些情况kswapd若被频繁唤醒会过度消耗cpu,此时可设置大页内存解决

swap交换空间

linux内存采用分页存取,内核会在适当时候将物理内存不常用的数据块自动换到swap中

无论物理内存是否足够,linux系统都会不时交换出不常用的物理页面,可以避免内存交换等待时间。交换的一句是最近最常使用算法。有时会看到 物理内存有很多 但swap却用了很多,这可能是因为内存交换,当内存不够时,会换出较多内存到swap,等内存够用了,换出去的不会自动换回来。swap在使用时会首先换到物理内存,若物理内存不够会导致再被换出去

文件系统指标

ext3/ext4/xfs

linux的fs是从vfs开始,然后是ext,ext2。ext3是ext2基础上增加日志形成的

ext2 fs一般由超级块,块组描述符,块组组成,使用索引节点(inode)记录文件信息,一个inode对应一个文件。索引节点是一种数据结构,存放文件的大小,访问创建时间,属主属组等信息

为避免磁盘大量访问导致的性能问题,一般fs采用异步方式,即读写不是同步进行,比如改了某个文件,改动放在内存中而不是立即写入磁盘,但系统有一个守护进程,再以恶合理时间段将操作批量写入盘

ext2 fs由冗余保存关键元数据信息备份功能,一般不会出现数据完全丢失。系统重启时,ext2会调用fsck恢复损坏的元数据信息,但fs很大时扫描很慢,ext3可以解决此问题。

ext3是一种日志式文件系统,其实就是在ext2基础上增加了一个特殊的inode(日志文件),用以记录文件元数据或各种写操作变化。这样,磁盘真正写入前,首先通过日志记录了文件系统各种操作和元数据变化,因此ext3中,如果写入了日志但磁盘改动还没写到盘上,可以通过日志记录恢复文件内容

ext4可提高系统性能,例如ext4支持更多子目录数量,支持日志校验,快速fsck等

rhet6和centos6以ext4为文件系统 rhet7和centos7以xfs作为文件系统,xfs也是一个高级日志文件系统,

文件系统选择和优化

web app 博客类应用 读频繁写操作一般 可ext4和xfs

db类应用 写操作频繁 可以xfs 其次是ext4 其次是ext3

普通应用 可以ext3和ext2 ext2没有日志记录功能 省了很多磁盘性能

消除fs瓶颈方法

写频繁,读频繁,根据特点存放不同目录,创不同类型fs

磁盘IO指标

磁盘IO调度策略

磁盘调度器总体目标是磁头可以总王一个方向移动,到了目标再反向移动,像电梯,算法也可以叫电梯算法。算法有好几种:完全公平排队、期限、noop,具体用哪种算法可由内核参数elevator决定

完全公平排队 平均分配时间片

期限 保证请求在最长的一个规定时间内一定能响应,避免饥饿

Noop 表示没有操作 也叫电梯调度算法,在FIFO队列里,对请求做适当合并

磁盘和缓存机制

通过缓存解决cpu 内存 磁盘之间速度不一致问题。cpu和磁盘速度差靠L1 L2 RAM等多级缓存消除。linux通过独立的磁盘缓存机制--页高速缓存 解决cpu和磁盘的差异

页高速缓存 从盘读出来的数据先放到内存 当数据要改变时 先改变内存的数据 由于磁盘延迟写 此时内存数据和盘数据不一致 内存的数据叫脏缓存 脏缓存应尽快同步到磁盘上 否则系统下电内存数据会丢失

同步脏缓存是由内核一个线程(flusher)完成。脏缓存写回磁盘有如下场景

1空闲内存不足时 需释放部分缓存 会回写脏页面

2 脏页中驻留内存时间超过特定阈值 回写

3 用户调用sync 和fsync系统调用时 是用户的强制回写指令 也会回写

flusher线程历史 linux2.6以前 flusher线程通过bdflush线程实现 内存达到特定阈值一下 bdflush线程唤醒 周期运行回写脏页 bdflush问题是只有一个bdflush线程 业务量大有阻塞风险 为解决此问题linux2.6引入了pdflush线程 pdflush线程数量是动态的 取决于系统IO的负载 pdflush有某个盘阻塞导致所有pdflush线程阻塞问题 linux2.6.32引入全新flusher线程概念 有多个flusher线程 同时不是每个线程面向所有盘 而是一个flush对应一个盘 避免了pdflush的问题

页回写一些阈值可在/proc/sys/vm中找到,某几个重要指标如下

dirty_background_ratio 脏页占总内存百分比,脏页大小达到此阈值 触发flusher线程开始回写

dirty_background_bytes 脏页占内存数量

dirty_expire_interval 单位0.01秒 描述超时多久的数据将被pdflush线程回写

dirty_writeback_centisecs flusher线程唤醒间隔 单位是0.01秒

dirty_expire_centisecs 脏数据过期时间超过该时间后 flusher唤醒时会将脏数据写回到盘上 单位0.01秒

调优工具

cpu工具

常用的很多 比如vmstat uptime mpstat等

vmstat

vmstat Virtual Memory Statistics 一般是个默认安装命令

vmstat [-V] [-n] [delay] [count]  delay是输出间隔 以间隔为周期一直输出 如果不加delay命令就显示一次然后结束 count是输出次数 不带则输出一次或一直输出 带了则输出count次信息后结束输出

-V 打印版本

vmstat 1 每秒输出一次

vmstat 1 5 每秒输出一次 输出5次结束

procs r 表示运行和等待cpu时间片的进程数,此值若长期大于系统cpu个数 说明cpu不足

procs b 表示等待资源的进程数,如盘资源,内存资源

swpd swap去内存数量 单位为KB

free 空闲物理内存量

buff 块设备读写缓冲

cache 页缓存数量

swap

si 磁盘写入内存的数量

so 内存调入磁盘的数量。一般si 和so长期为0 如果长期不为0则内存不足

io

bi 块设备读入数据总量KB/s

bo 写入块设备的数据总量  bi+bo参考值为1000 超过1000则IO性能可能不足

system

in 每秒设备中断数量

cs 每秒产生上下文切换次数 这俩只越大 内核消耗的cpu会越多

cpu

us 用户消耗cpu时间

sy 内核消耗cpu时间 根据经验us+sy参考是为80%

id idle cpu

wa 等待IO占的cpu wa参考值为20

uptime

输出依次为系统时间 上次开机到当前运行时间 当前用户 系统1 5 15分钟平均负载

注意load average 不能大于系统cpu个数

mpstat

Multiprocessor Statistics 是一个cpu试试监控工具 和vmstat类似 mpstat通过/proc/stat状态信息同居数据 mpstat可以查看多核cpu中每个核的统计数据 vmstat只能查看整体cpu使用情况

mpstat [-P {cpu|all}] [internal] [count]

-P 表示监控哪个cpu cpu编号范围为0~cpu个数-1

internal 和count与vmstat类似

usr 用户消耗cpu

nice 正常进程消耗cpu

irq 硬中断占cpu

soft 软中断占cpu

steal 内存紧张下的页操作

guest 运行虚拟处理器时cpu花费时间占比

gnice 运行带有nice优先级的cpu花费时间占比

内存工具

常用的有free smem等

smem

RSS 所有进程RSS相加会超过系统总内存 是因为RSS包含了进程间共享内存

PSS Proportional Set Size 进程的共享内存 对于单个享用进程 共享的内存是均分给每个进程 相比于RSS更准确 PSS总和等于系统总内存

USS 进程独自占用的内存 不包含任何共享部分

smem一般不系统自带 需要手动安装

命令用法 smem -k -s pss/uss/rss -p -u -P

-k 显示内存单位,类似于df的-h

-s 排序 可跟pss/uss/rss等

-p 按百分比显示进程内存

-u 显示每个用户占的总内存

-P 跟进程名 显示进程内存

磁盘工具

常用的有iotop iostat等

iotop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pcb元器件选型与焊接测试时的一些个人经验

元件选型 在嘉立创生成bom表,对照bom表买 1、买电容时有50V或者100V是它的耐压值,注意耐压值 2、在买1117等降压芯片时注意它降压后的固定输出,有那种可调降压比如如下,别买错了 贴片元件焊接 我建议先薄薄的在引脚上涂上锡膏…

【zookeeper03】消息队列与微服务之zookeeper集群部署

ZooKeeper 集群部署 1.ZooKeeper 集群介绍 ZooKeeper集群用于解决单点和单机性能及数据高可用等问题。 集群结构 Zookeeper集群基于Master/Slave的模型 处于主要地位负责处理写操作)的主机称为Leader节点,处于次要地位主要负责处理读操作的主机称为 follower 节点…

C 语言复习总结记录三

C 语言复习总结记录三 一 函数的定义 维基百科中对函数的定义:子程序 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的…

MYSQL——多表设计以及数据库中三种关系模型

大致介绍数据库中三种关系模型 一对多(1:N) 定义: 一个实体可以与另一个实体的多个实例相关联,而后者只能与前者的一个实例相关联。 例子: 学生和课程的关系。 学生(1):每个学生…

OpenCV和Qt坐标系不一致问题

“ OpenCV和QT坐标系导致绘图精度下降问题。” OpenCV和Qt常用的坐标系都是笛卡尔坐标系,但是细微处有些不同。 01 — OpenCV坐标系 OpenCV是图像处理库,是以图像像素为一个坐标位置,即一个像素对应一个坐标,所以其坐标系也叫图像…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…

《剖析 Spring 原理:深入源码的旅程(二)》

六、Spring 的 Bean 注入与装配 Spring 的 Bean 注入与装配的方式有很多种,可以通过 xml、get set 方式、构造函数或者注解等。简单易用的方式就是使用 Spring 的注解,Spring 提供了大量的注解方式,如 Autowired、Qualifier 等。Spring 还支持…

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…

CSRF保护--laravel进阶篇

laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…

jupyter notebook的 markdown相关技巧

目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点:一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果:加粗,斜体&#x…

【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中,我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来,将开启一个新的阶段&#…

redis工程实战介绍(含面试题)

文章目录 redis单线程VS多线程面试题**redis是多线程还是单线程,为什么是单线程****聊聊redis的多线程特性和IO多路复用****io多路复用模型****redis如此快的原因** BigKey大批量插入数据测试数据key面试题海量数据里查询某一固定前缀的key如果生产上限值keys * ,fl…

神经网络问题之二:梯度爆炸(Gradient Explosion)

梯度爆炸(Gradient Explosion)是神经网络训练过程中常见的一个问题,它指的是在反向传播过程中,梯度值变得非常大,超出了网络的处理范围,从而导致权重更新变得不稳定甚至不收敛的现象。 一、产生原因 梯度爆…

小杨的N字矩阵c++

题目描述 小杨想要构造一个m*m 的 N 字矩阵( m为奇数),这个矩阵的从左上角到右下角的对角线、第1 列和第m 列都 是半角加号 ,其余都是半角减号 - 。例如,一个 5*5 的 N 字矩阵如下: --- -- -- -- --- 请…

2024 年企业中的生成式 AI 现状

2024: The State of Generative AI in the Enterprise - Menlo Ventures 企业 AI 格局正在被实时改写。随着试点(Pilot)让位于生产(Production),我们对 600 名美国企业 IT 决策者进行了调查,以揭示新出现的…

Ubuntu24虚拟机-gnome-boxes

推荐使用gnome-boxes, virtualbox构建失败,multipass需要开启防火墙 sudo apt install gnome-boxes创建完毕~

Haystack 的开源开发 LLM 应用设计框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

leetcode 919.完全二叉树插入器

1.题目要求: 完全二叉树 是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。设计一种算法,将一个新节点插入到一棵完全二叉树中,并在…

提升性能测试效率与准确性:深入解析JMeter中的各类定时器

在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…