1.Linux性能观测之dstat命令详解
2.开源免费的标源Linux服务器管理面板分享
3.Linux系统调试篇——Perf性能分析指南
4.肝了这么多夜,总结一下:Linux各项指标监控及问题排查。码l命令
5.Linux 性能调优必备:perf 使用指南
6.Linux 中断( IRQ / softirq )基础:原理及内核实现
Linux性能观测之dstat命令详解
dstat是源码一个强大的系统信息统计工具,集成了vmstat、标源iostat、码l命令netstat、源码个人博客php 源码nfsstat和ifstat的标源功能,能够全面观测Linux性能。码l命令 要深入理解dstat,源码首先回顾其安装方式。标源请按照以下步骤操作:1. 打开终端。码l命令
2. 使用命令 `sudo apt-get install dstat` 在Debian/Ubuntu系统上安装dstat,源码或使用 `yum install dstat` 在CentOS/RHEL系统上安装。标源
3. 若遇到问题,码l命令可以参考社区资源或官方文档寻求解决方案。源码
dstat的使用简单高效。它能以图形或文本形式提供系统性能指标,如CPU使用率、磁盘IO、网络I/O、分页活动和系统统计。以下是常用命令形式:
- `total-cpu-usage`:查看CPU的总体使用情况。
- `dsk/total`:展示磁盘IO的总情况。
- `net/total`:显示网络I/O的总览。
- `paging`:监测系统的分页活动。
- `system`:收集系统统计信息。
若需查阅更多dstat的英文说明或功能细节,可参考以下资源:
- Linux manpage dstat
此外,了解如何优化Linux性能和排查内存泄漏问题同样重要。我们整理了一些学习资料和书籍,欢迎加入我们的Linux内核源码交流群。前名加入的成员将获得免费的内核资料包,包含视频教程、电子书、实战项目及代码。加入时请使用真实信息,我们期待与您分享知识和经验。
学习Linux内核源码的路径包括:内核源码解析、内存调优、文件系统、进程管理、设备驱动、网络协议栈等。开源免费的Linux服务器管理面板分享
本文将分享几款开源免费的Linux服务器管理面板,它们分别是1Panel、webmin、Cockpit、宝塔面板、美团项目源码下载Mdserver-web和InPanel,以及一些个人版选择,如AppNode。1. 1Panel
1Panel是一个现代化的服务器管理面板,提供友好的web界面,便于管理员监控和管理服务器。其首页显示核心功能,如系统状态、流量和磁盘IO,并集成了应用商店、网站管理等全面功能。2. Webmin
Webmin是网络服务器管理的灵活工具,管理员通过浏览器实现远程管理。其首页展示系统指标,适合不同规模的服务器环境,支持中文。3. Cockpit
Cockpit是红帽开发的交互式管理工具,通过浏览器直接与Linux操作系统交互,特别适合红帽系列Linux,集成容器和Kubernetes管理。4. 宝塔面板
宝塔面板是易用且终身免费的管理软件,集成常用服务器软件,如Nginx、Apache等,提供一键部署和文件管理功能,适合初学者和小型网站管理。5. Mdserver-web
Mdserver-web提供简单易用的Web界面,支持虚拟主机管理、SSL证书管理等,是小型网站管理和部署的理想选择。6. InPanel
InPanel简化服务器管理,提供详细系统状态信息,拥有直观的Web界面,适合不同级别的管理员。 总的来说,这些开源免费的Linux管理面板各具特色,用户可以根据需求和偏好选择最适合自己的工具,进行服务器的高效管理和维护。Linux系统调试篇——Perf性能分析指南
Linux系统调试篇——Perf性能分析指南
Perf是一个强大的性能分析工具,用于监控程序运行时的性能事件,如执行时间、上下文切换和缓存命中率等。通过它,开发人员可以定位程序性能瓶颈,进行优化。安装时,可以使用apt在开发板上安装,分时雷达主图源码或在内核源码目录下编译并传输至设备。 perf主要分为基础子命令和功能型子命令。基础子命令如perf list用于查看支持的性能事件,而perf stat则能实时采样并展示这些事件。tracepoint event功能强大,可针对内核中特定时刻进行采样,如sched:sched_switch,记录进程调度情况。 perf record与perf report配合使用,前者记录数据生成perf.data文件,后者解析并展示详细信息。perf script则用于生成perf.unfold文件,供FlameGraph工具生成易于理解的火焰图,展示函数调用耗时情况。 例如,perf top动态显示采样事件,而perf bench则内置了性能基准测试,如内存和调度方面的测试。要充分利用perf,需要理解性能指标的含义及其影响,这需要深入学习和实践。肝了这么多夜,总结一下:Linux各项指标监控及问题排查。
htop 和 top 命令提供全面的指标监控,直接查看帮助文档以深入了解各种功能。
使用 sort 命令按照 mem、cpu 和状态排序,特别是在负载过高的情况下,能迅速定位到高资源占用的进程。
通过 filter 和 fields 功能,可以精确筛选并查看进程数量等信息。
在 /proc/cpuinfo 文件中查找 CPU 相关信息,包括个数、型号和主频。
使用 uptime 和 w 命令打印过去 1、5、 分钟的平均负载,并通过 sar -q 实时监控动态平均负载。
平均负载是指系统中处于可运行和不可中断状态的平均进程数,对于 4 核 CPU,若平均负载高于 4,则表示负载过高。
htop 和 top 命令可直接查看 CPU 使用率,通过 idle 的 CPU 时间计算得出 CPU 利用率。
通过 strace 命令追踪系统调用过程。
使用 free 命令查看系统内存情况,pidstat -r 和 htop 可用于监控单个进程内存。龙回首指标公式源码
htop/top 提供所有进程状态信息,尤其在高负载或特定场景下尤其重要。
ps -O rss 命令用于查看进程内存使用,top、htop 和 pidstat -r 同样具有类似功能。
pidstat -sr 实时监控进程内存使用情况。
minflt 和 majflt 代表缺页异常,在 pidstat -s 中查看。
使用 lsof 命令列出所有打开的文件。
在容器中,通过 namespace PID 映射到 global PID,使用 top/htop 定位到容器内的进程。
使用 ss 或 netstat 查看网络吞吐量、socket 状态与信息,特别在 docker 环境中。
了解 PostgresSQL 和 mysql 的最大与当前连接数,对于监控和优化系统性能至关重要。
Linux 性能调优必备:perf 使用指南
perf 是 Linux 内核源码树内嵌的性能剖析工具。
它运用事件采样原理,以性能事件为核心,支持对处理器和操作系统性能指标的剖析。通常用于查找性能瓶颈和定位热点代码。
本文目录包括:
安装 perf
在大多数 Linux 发行版中,perf 工具包含在linux-tools 包中。使用包管理器安装,如 Debian 系统上的:
在 Red Hat/CentOS 系统上:
基本使用
列出所有可用的性能事件,包括硬件事件和软件事件。
使用perf record 记录目标程序的性能数据。
例如:-g 表示记录调用栈,-a 表示对所有 CPU 进行采样,-F 表示每秒采样 次,sleep 6 是要分析的程序。
这会生成 perf.data 文件,包含采集的性能数据。
可以指定要分析的事件类型,如 CPU 时钟周期、缓存命中等。
支持跟踪点,一种在内核中预定义的事件,用于跟踪系统调用等。
(常用的)可选参数
每个参数的使用取决于具体需求。例如,使用-a 参数对整个系统进行性能分析;使用-p 或 -t 分析特定进程或线程;-g 对理解程序的函数调用关系非常重要。
实际使用中,先使用perf record ./your_program 进行简单性能记录,再尝试添加不同参数。
分析性能数据
使用perf report 分析记录的微趣应用平台源码数据。
可以用-i 指定要分析的性能数据。
这将展示一个交互式报告,可使用键盘导航查看不同视图。
使用示例
以下是一个简单的 C++ 程序示例,创建一个 std::vector 并使用 push_back 和 emplace_back 方法添加元素,以比较这两种方法在性能上的差异。
ComplexObject 类有一个构造函数,接受一个整数参数并存储它。构造函数和析构函数都会输出一条消息,以便看到对象的创建和销毁。创建 万个这样的对象,并比较 push_back 和 emplace_back 的性能。
要编译和运行这个程序,需要一个支持 C++ 或更高版本的编译器。使用以下命令:
这将编译程序并运行生成的 vector_test 可执行文件。
使用 perf 分析程序性能。
确保有权限运行 perf。
使用以下命令记录性能数据:
perf record ./vector_test
运行结束后,使用perf report 查看性能报告。
在报告中,可以看到不同函数的调用次数、执行时间等信息。
进入交互界面后,
其他功能
perf 提供了许多其他工具,如 perf stat(显示程序运行时的性能统计信息),perf top(实时显示性能热点),perf annotate(显示源代码级别的性能分析)等。
使用perf top 查看实时性能数据。
对特定函数或代码行进行性能分析。
统计特定事件(如缓存未命中)的发生次数。
高级用法注意事项可能遇到的问题
问题1
根据错误信息,系统上的 perf_event_paranoid 设置为 4,意味着除了具有特定 Linux 能力的进程外,所有用户都无法使用性能监控和可观察性操作。
要解决这个问题,有几个选项:
使用以下命令临时更改设置:
sudo sysctl -w kernel.perf_event_paranoid=-1
或者,如果你只想允许使用用户空间事件:
sudo sysctl -w kernel.perf_event_paranoid=0
请注意,降低 perf_event_paranoid 的值可能会增加系统安全风险。
问题2
错误信息表明,由于 /proc/sys/kernel/kptr_restrict 设置的值,内核符号(kallsyms)和模块的地址映射被限制了。
当你尝试使用perf record 收集性能数据时,如果无法解析内核样本,将无法得到有关内核函数和模块的详细信息。
为了解决这个问题,你可以采取以下步骤:
你可以临时更改 kptr_restrict 的值,以允许 perf 工具访问内核指针。
这将设置 kptr_restrict 为 0,允许所有用户访问内核指针。
如果你的系统上有 vmlinux 文件,perf 工具可以使用它来解析内核样本。
确保 vmlinux 文件与当前运行的内核版本相匹配。
如果 vmlinux 文件不存在或过时,你可能需要更新它。
降低 kptr_restrict 的值会降低系统的安全性。
Linux 中断( IRQ / softirq )基础:原理及内核实现
中断(IRQ),尤其是软中断(softirq)的广泛用途之一是网络数据包的接收与发送,但其应用场景并非单一。本文将全面整理中断(IRQ)与软中断(softirq)的基础知识,这些内容与网络数据包处理虽无直接联系,但整理本文旨在更深入地理解网络数据包处理机制。
什么是中断?
CPU 通过时分复用处理多任务,其中包括硬件任务,如磁盘读写、键盘输入,以及软件任务,如网络数据包处理。CPU 在任何时刻只能执行一个任务。当某个硬件或软件任务当前未被执行,但希望CPU立即处理时,会向CPU发送中断请求——希望CPU暂停手头工作,优先服务“我”。中断以事件形式通知CPU,因此常看到“在XX条件下会触发XX中断事件”的表述。
中断分为两类:
管理中断的设备:Advanced Programmable Interrupt Controller(APIC)。
硬中断的中断处理流程
中断随时发生,处理流程如下:
Maskable and non-maskable
Maskable interrupts 在x_上可以通过sti/cli指令来屏蔽(关闭)和恢复:
在屏蔽期间,这种类型的中断不会触发新的中断事件。大部分IRQ都属于这种类型。例如,网卡的收发包硬件中断。
Non-maskable interrupts 不可屏蔽,因此属于更高优先级的类型。
问题:执行速度与逻辑复杂性之间的矛盾
IRQ处理器的两个特点如下:
存在内在矛盾。
解决方式:中断的推迟处理(deferred interrupt handling)
传统解决方式是将中断处理分为两部分:
这种方式称为中断的推迟处理或延后处理。现在已是一个通用术语,涵盖各种推迟执行中断处理的方式。中断分为两部分处理:
在Linux中,有三种推迟中断(deferred interrupts):
具体细节将在后续介绍。
软中断与软中断子系统
软中断是内核子系统的一部分:
每个CPU上会初始化一个ksoftirqd内核线程,负责处理各种类型的softirq中断事件;
使用cgroup ls或ps -ef都能看到:
软中断事件的handler提前注册到softirq子系统,注册方式为open_softirq(softirq_id, handler)
例如,注册网卡收发包(RX/TX)软中断处理函数:
软中断占用了CPU的总开销:可以使用top查看,第三行倒数第二个指标是系统的软中断开销(si字段):
Linux内核源码分析学习地址:ke.qq.com/course/...
文章福利小编推荐自己的Linux内核源码分析交流群:点击加入整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!
主处理
smpboot.c类似于事件驱动的循环,会调度ksoftirqd线程执行pending的软中断。ksoftirqd内部会进一步调用到__do_softirq,
避免软中断占用过多CPU
软中断的潜在影响:推迟执行的部分(如softirq)可能会占用较长时间,在这段时间内,用户空间线程只能等待。反映在top中,si占比。
不过softirq调度循环对此有所改进,通过budget机制来避免softirq占用过多CPU时间。
硬中断-软中断调用栈
softirq是一种推迟中断处理机制,将IRQ的大部分处理逻辑推迟在这里执行。有两条路径都会执行到softirq主处理逻辑__do_softirq():
1、CPU调度到ksoftirqd线程时,会执行到__do_softirq();
2、每次IRQ handler退出时:do_IRQ()->...
do_IRQ是内核中主要的IRQ处理方式。它执行结束时,会调用exiting_irq(),这会展开成irq_exit()。后者会检查是否pending有softirq,如果有,则唤醒:
进而会使CPU执行到__do_softirq。
软中断触发执行的步骤
总结,每个软中断会经过以下阶段:
以收包软中断为例,IRQ handler并不执行NAPI,只是触发它,在内部会执行到raiseNET_RX_SOFTIRQ;真正的执行在softirq,会调用网卡的poll()方法收包。IRQ handler中会调用napi_schedule(),然后启动NAPI poll()。
需要注意的是,虽然IRQ handler所做的工作很少,但处理这个包的softirq和IRQ在同一CPU上运行。这意味着,如果大量的包都放在同一个RX队列,虽然IRQ开销可能不多,但该CPU仍然会非常繁忙,都花费在softirq上。解决方式:RPS。它不会降低延迟,只是将包重新分配:RXQ->CPU。
三种推迟执行方式(softirq/tasklet/workqueue)
提到,Linux中的三种推迟中断执行方式:
其中:
前面已经看到,Linux在每个CPU上创建了一个ksoftirqd内核线程。
softirqs是在Linux内核编译时确定的,例如网络收包对应的NET_RX_SOFTIRQ软中断。因此是一种静态机制。如果想添加一种新softirq类型,需要修改并重新编译内核。
内部组织
内部由一个数组(或称为向量)管理,每个软中断号对应一个softirq handler。数组与注册:
在5.中所有类型的softirq:
也就是在cat /proc/softirqs看到的哪些。
触发(唤醒)softirq
以收包软中断为例,IRQ handler并不执行NAPI,只是触发它,在内部会执行到raiseNET_RX_SOFTIRQ;真正的执行在softirq,会调用网卡的poll()方法收包。IRQ handler中会调用napi_schedule(),然后启动NAPI poll()。
如果对内核源码有一定了解,会发现softirq使用非常有限,原因之一是它是静态编译的,依赖内置的ksoftirqd线程来调度内置的9种softirq。如果想添加一种新功能,就得修改并重新编译内核,开发成本很高。
实际上,实现推迟执行的更常用方式是tasklet。它构建在softirq机制之上,具体来说就是使用了两种softirq:
换句话说,tasklet是在运行时(runtime)创建和初始化的softirq,
内核软中断子系统初始化了两个per-cpu变量:
tasklet再执行针对list的循环:
tasklet在内核中的使用非常广泛。不过,后面又出现了第三种方式:workqueue。
这也是一种推迟执行机制,与tasklet有些相似,但有显著不同。
使用场景
简而言之,workqueue子系统提供了一个接口,通过该接口可以创建内核线程来处理从其他地方enqueue过来的任务。这些内核线程称为worker threads,内置的per-cpu worker threads:
结构体
kworker线程调度workqueues,原理与ksoftirqd线程调度softirqs类似。然而,我们可以为workqueue创建新的线程,而softirq则不行。
参考资料引用链接
[1]
中断与中断处理:0xax.gitbooks.io/linux-...
作者:赵亚楠 原文:arthurchiao.art/blog/li...来源:云原生实验室
怎样分析linux的性能指标
LR
监控
UNIX/Linux
系统方法
一、准备工作:
1.
可以通过两种方法验证服务器上是否配置
rstatd
守护程序:
①使用
rup
命令,它用于报告计算机的各种统计信息,其中就包括
rstatd
的配置信息。使用命
令
rup
...,
此处
...
是要监视的
linux/Unix
服务器的
IP
,如果该命令返回相关的
统计信息。则表示已经配置并且激活了
rstatd
守护进程;若未返回有意义的统计信息,或者出现一
条错误报告,则表示
rstatd
守护进程尚未被配置或有问题。
②使用
find
命令
#find / -name rpc.rstatd,
该命令用于查找系统中是否存在
rpc.rstatd
文件,如果没有,说明系统没
有安装
rstatd
守护程序。
2
.
linux
需要下载
3
个包:
(
1
)
rpc.rstatd-4.0.1.tar.gz
(
2
)
rsh-0.-.i.rpm
(
3
)
rsh-server-0.-.i.rpm
3
.下载并安装
rstatd
如果服务器上没有安装
rstatd
程序(一般来说
LINUX
都没有安装)
,需要下载一个包才有这个服
务
,
包
名
字
是
rpc.rstatd-4.0.1.tar.gz.
这
是
一
个
源
码
,
需
要
编
译
,
下
载
并
安
装
rstatd
(
可
以
在
municate with the portmapper on host '...'.
RPC: RPC call failed.
RPC-TCP: recv()/recvfrom() failed.
RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-]
检查原因,发现是
Linux
系统中的防火墙开启了并且阻挡了
LoadRunner
监控
Linux
系统的资源,
因此要将防火墙关闭。
关闭防火墙:
[root@localhost ~]# /etc/init.d/iptables stop;
三、监控
UNIX
lr
监控
UNIX
UNIX
先启动一
rstatd
服务
以下是在
IBM AIX
系统中启动
rstatd
服务的方法:
1
.使用
telnet
以
root
用户的身份登录入
AIX
系统
2
.在命令行提示符下输入:
vi /etc/inetd.conf
3
.查找
rstatd
,找到
#rstatd
sunrpc_udp
udp
wait
root /usr/sbin/rpc.rstatd rstatd 1-3
4
、将
#
去掉
5
、
:wq
保存修改结果
6
、命令提示符下输入:
refresh
–
s inetd
重新启动服务。
这样使用
loadrunner
就可以监视
AIX
系统的性能情况了。
注:在
HP UNIX
系统上编辑完
inetd.conf
后,重启
inetd
服务需要输入
inetd -c
UNIX
上也可以用
rup
命令查看
rstatd
程序是否被配置并激活
若
rstatd
程序已经运行,
重启时,
先查看进程
ps -ef |grep inet
然后杀掉进程,
再
refresh
–
s inetd
进行重启。
Linux性能优化之CPU使用率
CPU 使用率是衡量 CPU 工作负载的指标,通过百分比显示。主要命令用于查看此指标包括 top 和 ps。top 呈现所有 CPU 的平均使用率,输入数字1可查看每个核心的使用率。空白行后显示进程实时信息,每个进程的 %CPU 列表示总使用率,包括用户态和内核态。top 命令不细分。分析单进程使用率时,pidstat 工具适用。使用 pidstat 命令可间隔一秒查看进程的 CPU 使用率。
输出结果包含多个数据点及平均值。top、ps、pidstat 工具有助于定位 CPU 使用率高的进程。但需分析具体原因和代码。perf 工具适合此任务,它基于性能事件采样分析系统事件、内核性能及应用性能。使用 perf 分析 CPU 性能问题有 perf top 和 perf record & perf report 两种方法。perf top 实时显示 CPU 使用率最高的函数或指令,用于查找热点函数。使用界面显示采样数、事件类型和事件总数。采样数过少影响排序和百分比的参考价值。perf top 输出中,第一行包含采样数、事件类型和事件总数。采样数需注意,过少时排序和百分比无实际意义。perf top 输出从第二行开始,包含四列数据,代表不同的含义。perf record 用于保存数据,后续使用 perf report 解析。实际使用中,通常为 perf top 和 perf record 添加 -g 参数以跟踪调用关系。
Linux内核源码分析学习资源:访问 ke.qq.com/course/...
福利加入Linux内核源码分析交流群:点击加入。群内提供了一些个人推荐的优质学习资料,包括书籍和视频,供群成员自由查阅。
案例中,代码执行过程注入死循环,导致CPU使用率达到%。通过工具分析,找到引起CPU利用率升高的代码段。案例代码生成的可执行文件名为 main。在Ubuntu系统中,执行main程序后,使用top命令查看CPU使用率。CPU2的使用率高达%,同时main进程的CPU使用率也达到%,表明系统CPU使用率升高源于main进程。使用perf命令定位具体导致CPU使用率升高的函数。通过调用关系显示,发现问题在于注入死循环的函数func。使用perf工具分析CPU使用率升高原因,支持命令丰富,通过"perf help"查看所有命令,"perf help COMMAND"查看特定命令的用法。
生产工作中,可能遇到系统总体CPU使用率高但单个进程CPU使用率低的情况。分析这类问题时,可使用 pstree 和 execsnoop 工具。下文提供了安装pstree和execsnoop工具的步骤。内容转载自/s/EQdBqN3_sOHQafSUOe1k3g。