原则:

确认优化方向;
确认优化目标,通过对比其他案例或国际标准;
控制变量法找出短板。

系统级CPU性能分析

vmstat

vmstat是指虚拟内存统计,他除了能告诉你虚拟内存的性能信息,还能获取整个系统性能的内存信息:
1.正在运行的进程个数;
2.CPU的使用情况;
3.CPU接收的中断个数;
4.调度器执行上下文切换次数。

$vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st1  0   6400 347620  42584 2464116    0    0    14    21  110  180  1  1 98  0  0

从上述案例可以看出,自开机以来,平均的系统执行时间1%,用户执行时间是1%,其余98%的时间CPU都在空余。

vmstat最好用的功能是采样输出:

$vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st1  0  14592 439432   8880 2396660    0    0    15    29  113  185  1  1 98  0  00  0  14592 438676   8880 2396640    0    0     0     0  493  777  1  1 99  0  00  0  14592 438676   8880 2396640    0    0     0     0  505  766  1  1 98  0  00  0  14592 439936   8880 2396640    0    0     0     0  450  683  1  1 99  0  00  0  14592 439436   8880 2396640    0    0     0     0  492  768  0  1 99  0  0

除了第一行是开机以来的平均时间,其余都是采样2秒的采样使用率。

vmstat [-n] [-s] [delay [count]]


top

top信息详解
默认情况下,top显示的是CPU占用最高的进程的列表。

1、第一行任务队列信息,同uptime命令效果相同

02:22:03 ,当前时间
up 1 day, 18:09 ,系统运行时间
1 user ,当前登陆用户数
load average: 0.00, 0.00, 0.00  ,系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的系统平均负载。

什么是系统平均负载?平均负载可以理解为当前系统的平均活跃进程数,包含了系统处于可运行状态和不可中断状态的平均进程数,就是平均活跃进程数。
那么知道了什么是系统平均负载,那么它为多少时代表我们的系统负载较高呢?比如,此时1分钟的平均负载为5.6,而我们的操作系统是4个CPU,那么就代表此时系统负载过高,意味着有160%的的超载进程竞争不到CPU;若负载为2.0,则意味着有50%的CPU空闲。

2、第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。top命令回车后,按数字"1"就会显示cpu的核数。

total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
0.3% us 用户空间占用CPU百分比
0.3% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.5% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比

从上我们可以看到进程的状态都处于S状态,那么除了S,还有其他进程状态么?当然除了S状态,还有R、D、Z、I 等几个状态,它们分别是什么意思呢?

R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
Z 是 Zombie 的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。D 状态的进程会导致平均负载升高, I 状态的进程却不会。

3.第四、五行为内存信息

Mem:
65724264k total    物理内存总量
37653788k used    使用的物理内存总量
28070476k free    空闲内存总量
371320k buffers    用于内存和硬盘交互,通常是写入磁盘的缓存
Swap:
32767996k total    交换区总量
0k used            使用的交换区总量
32767996k free    空闲交换区总量
31845892k cached    用于CPU和内存交互,通常是从磁盘读数据的缓存

4、进程信息区统计信息区域的下方显示了各个进程的详细信息。

列名    含义PID     进程idPPID    父进程idRUSER   Real user nameUID     进程所有者的用户idUSER    进程所有者的用户名GROUP   进程所有者的组名TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?PR      优先级NI      nice值。负值表示高优先级,正值表示低优先级P       最后使用的CPU,仅在多CPU环境下有意义%CPU    上次更新到现在的CPU时间占用百分比TIME    进程使用的CPU时间总计,单位秒TIME+   进程使用的CPU时间总计,单位1/100秒%MEM    进程使用的物理内存百分比VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESSWAP    进程使用的虚拟内存中,被换出的大小,单位kb。RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATACODE    可执行代码占用的物理内存大小,单位kbDATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbSHR     共享内存大小,单位kbnFLT    页面错误次数nDRT    最后一次写入到现在,被修改过的页面数。S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)COMMAND 命令名/命令行WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名Flags   任务标志,参考 sched.h

top命令使用方法

top [d delay] [c] [H] [i] [n] [iter] [b]

top有两种模式,一个是命令行模式,一个是运行时的交互模式。

命令行模式
此模式下的一些选项:

此模式下的各段说明:

运行期模式
top的可定制化功能很有用,在top运行期间:


procinfo

procinfo
Memory:        Total        Used        Free     Buffers
RAM:         3635168     2273944     1361224       63788
Swap:        2097148           0     2097148                                   Bootup: Wed Aug 17 14:47:09 2022   Load average: 0.38 0.16 0.04 1/488 15892    user  :   00:02:30.36   0.9%  page in :          1160754
nice  :   00:00:05.22   0.0%  page out:           232457
system:   00:03:15.15   1.1%  page act:           157064
IOwait:   00:00:03.05   0.0%  page dea:                0
hw irq:   00:00:00.00   0.0%  page flt:          4595096
sw irq:   00:00:02.88   0.0%  swap in :                0
idle  :   04:45:02.83  98.0%  swap out:                0
uptime:   01:12:45.18         context :          3435948                       irq   0:          9  2-edge timer        irq  24:       5868  49152-edge prl_tg
irq   1:        504  1-edge i8042        irq  25:         35  487424-edge xhci_
irq   8:          1  8-edge rtc0         irq  26:      31374  512000-edge ahci[
irq   9:       6589  9-fasteoi acpi      irq  27:          0  81920-edge virtio
irq  12:        143  12-edge i8042       irq  28:       1817  81921-edge virtio
irq  14:          0  14-edge ata_piix    irq  29:       2317  81922-edge virtio
irq  15:          0  15-edge ata_piix    irq  30:          1  524288-edge virti
irq  18:       5711  18-fasteoi uhci_h   irq  31:      69546  524289-edge virti
irq  19:         47  19-fasteoi ehci_h   irq  32:       1938  516096-edge snd_h
irq  22:       1259  22-fasteoi virtio

gnome-system-monitor

图形化系统监视器

sar

sar的特点是,能保存一段时间的CPU状态:

$sar -o ~/test 1 3
Linux 5.15.0-46-generic (ubuntu)    08/17/2022  _x86_64_    (4 CPU)04:10:28 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:10:29 PM     all      0.76      0.00      0.76      0.00      0.00     98.49
04:10:30 PM     all      0.50      0.00      1.75      0.00      0.00     97.76
04:10:31 PM     all      0.50      0.00      0.75      0.00      0.00     98.74
Average:        all      0.59      0.00      1.09      0.00      0.00     98.33

查看test文件:

$sar -f ~/test.txt
Linux 5.15.0-46-generic (ubuntu)    08/17/2022  _x86_64_    (4 CPU)04:10:28 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:10:29 PM     all      0.76      0.00      0.76      0.00      0.00     98.49
04:10:30 PM     all      0.50      0.00      1.75      0.00      0.00     97.76
04:10:31 PM     all      0.50      0.00      0.75      0.00      0.00     98.74
Average:        all      0.59      0.00      1.09      0.00      0.00     98.33

系统级内存性能分析

通常,在CPU执行指令或处理数据前,它会消耗相当多的空闲时间来等待从内存中取出指令和数据。处理器用不同层次的高速缓存(cache)来弥补这种缓慢的内存性能。

Linux内存划分使用页为单位,而不是字节,通常情况下,页大小为4K,大页内存为2M。

如果物理内存不足,Linux会使用硬盘空间作为交换空间,交换空间的速度要比内存慢一千倍,因此系统性能不佳时,确认交换空间使用了多少。
内存不足时,程序会报错,但交换空间读写慢时,系统运行慢,但不至于崩溃。

buffer和cache,buffer是内存和硬盘交互的缓冲区,用于将数据写入硬盘;cache是CPU和内存的缓冲区,用于读取硬盘数据。

Linux内核在“记账”时也会消耗一定的内存,包括:跟踪IO数据、跟踪正在运行的进程等。

vmstat

vmstat提供如下信息:
使用了多少交换空间;
物理内存是如何被使用的;
剩余多少空闲内存。

procinfo

todo

free

Linux会尽可能使用内存来缓存数据和应用程序。

slaptop

sar

/proc/meminfo

sudo cat /proc/meminfo

指定进程的CPU性能分析

在系统级定位问题后,如果定位到是某个进程的CPU存在性能问题,那么接下来:
分析是哪个函数,再定位是哪行代码。

  • 确定应用程序的运行时间是花在内核上还是在应用程序上;
  • 确定应用程序有哪些库调用和系统调用,以及他们花费几的时间;
  • 分析应用程序,找出哪些源代码行和函数的完成时间最长。

要理解一个应用程序的性能,至关重要的一点就是理解他与操作系统、CPU和存储系统是怎样进行交互的。

进程性能统计信息
【内核时间和用户时间】
应用程序耗费的时间分为内核时间和用户时间,可以使用time和ps等工具;

【库时间和应用时间】
即使最简单的用户程序,也要调用库函数,使用ltrace、oprifile等工具可以查看。

【细分应用程序时间】
当知道是某个应用程序的瓶颈后,可以使用gprof、pprofile等工具查看哪些源代码行花费了大量时间。

time

time会测量三种时间,真实时间(从执行到退出)、用户时间、系统时间。

sudo time -v a.out

strace

strace是系统调用追踪工具。

ltrace

strace跟踪的是内核调用,ltrace跟踪的是应用库调用。

ps

ps是进程跟踪工具。
ps提供的静态信息包括命令名和PID,动态信息包括内存和CPU的当前使用情况。

ps -o etime,time,pcpu,cmd 2643
    ELAPSED     TIME %CPU CMD10:34:05 00:00:00  0.0 /usr/libexec/dconf-service

ld.so

动态加载器。
当应用程序需要加载动态库时,ld.so会将符号进行重定位,以解决内存地址冲突问题。

gprof

gprof用于统计程序运行后,函数的调用次数。

首先编译时需要添加选项:

gcc -pg -g3 -o main main.c

然后运行程序生成gmon.out

./main

最后,gprof查看函数调用次数:

gprof --brief -p main
Flat profile:Each sample counts as 0.01 seconds.no time accumulated%   cumulative   self              self     total           time   seconds   seconds    calls  Ts/call  Ts/call  name    0.00      0.00     0.00        1     0.00     0.00  select

指定进程的内存性能分析

包括:某个进程使用了多少内存,进程的哪些函数分配了内存,函数的哪段代码分配了内存等。

内存分为:驻留集(实际分配的内存),虚拟集(理论上应该分配的内存大小)

ps

ps -o vsz,rss,tsiz,dsiz,majflt,minflt,cmd 133699


可以看到,程序本身是140k,虚拟集是57K,驻留集是6k,堆栈式57k

/proc

cat /proc/进程号/status

status显示的内存内容包括:

cat /proc/进程号/maps

mps显示的内存内容包括:

主要显示了调用的库函数在内存中的占用位置。

memprof

没找到安装包

valgrind

查看处理器的高速缓存情况。
valgrind使用软件模拟cpu来查看高速缓存的命中情况,如果未命中次数多,就会调用内存交互,消耗时间。


从图中可以看出,共引用指令11317111次,L1缓存和L2缓存丢失率都是0.

高速缓存的主要问题在于命中率低,要消除这个问题,推荐做法是使用数组而不是链表。

kcachegrind

oprofile

相对于cachegrind使用模拟CPU,oprofile使用物理CPU来测试缓存状态。
但是cachegrind的兼容性和易用性比较好。
而oprofile能够监测的事件都是与特定处理器相关的。
在Pentium III上,oprofile只能同时测量两个事件,而cachegrind则可以同时测量多种类型的内存事件。这就意味着,对oprofile来说要测量与cachegrind相同的事件,我们必须多次运行应用程序,并且每次运行期间都要改变oprofile的监控事件。第二个缺陷就是oprofile不会像cachegrind那样提供精确的事件计数,它只对计数器采样,因此我们能够看到事件最有可能在哪里发生,但是却无法看到确切的数量。

ipcs

ipcs用于分析共享内存,当不带任何参数时,给出的是系统级统计信息。

ipcs -p

显示谁创建了共享内存,谁在用共享内存。

磁盘IO性能分析

如果磁盘驱动是IDE,则被命名为hda、hdb、hdc等;
如果磁盘驱动是SCSI,则被命名为sda、sdb、sdc等。

vmstat


vmstat 1 3

每秒采样一次,采样三次。

vmstat -d
vmstat -D


在磁盘读写时,如果Linux发现多次请求是在相邻区域时,Linux会将IO操作合并为merged read(合并读)、merged write(合并写)。

iostat

iostat是专门分析磁盘IO性能的。

显示信息如下:

统计信息如下:

sar

sar -d 1 3

lsof

列举系统上已经打开的文件。
可以使用lsof列举哪些进程访问了特定分区上的文件,再通过strace找出IO量大的进程。

选项:

信息:

网络

七层协议:
物理层:用于连接两个模块的东西,如布线、光纤、网卡等;
链路层:mac地址,交换机、驱动等;
网络层:IP传输协议;
传输层:端口信息;
会话层:?
表示层:?
应用层:浏览器,等

四层应用:
链路层:交换机等;
网络层:IP传输协议;
传输层:端口;
应用层:浏览器。

物理设备命名规则:
以太网设备被命名为ethN,其中eth0是指第一个设备,eth1是指第二个设备;
ppp设备被命名为pppN;
回环设备用于发送给本机,被命名为lo。

端口:可以认为端口号是进程的别名。发送给端口就相当于发送个某个进程。

网卡和交换机

mii-tool

mii-tool -v eth0

ethtool

ethtool eth0

ifconfig

ifconfig几乎在所有联网的Linux机器上都是可用的。
ifconfig的主要工作就是在Linux机器上安装和配置网络接口,他还提供了系统中所有网络设备的基本性能统计信息。

ifconfig性能统计信息

ifconfig统计的是从开机后,一直到现在的总数据量,如果中途关闭了网卡,数据也不会重置。

ip

ip正在取代ifconfig,ip不仅可以配置网络信息,还能显示每个网络设备的性能统计信息。

ip -s link

sar

sar查看网络的功能参数:

sar统计网络性能:

gkrellm

图形化显示系统性能

iptraf

i-traffic -d eth0 -t 1

netstat

默认情况下,显示所有套接字使用情况。

netstat -t -c

etherape

可视化显示机器的流量情况

实用工具

性能工具助手

自动执行和记录命令
性能调查中最有价值的步骤之一就是保存在调查过程中发出的命令和产生的结果。这使得你可以在之后对它们进行回顾并寻求新的见解。为了帮助实现这个目的,Linux提供了两个命令:tee和script,前者能将工具的输出保存为文件,后者能记录每一个按键和屏幕上的每一个输出。这些信息可以保存下来,便于之后查看或者创建脚本来自动执行测试。

自动执行命令很重要,因为它可以减少出错的机会,使你在思考问题时不需记住所有的细节。在你一次性键入又长又复杂的命令行之后,bash shell和watch命令都可以让你周期性地自动执行这些命令。在你保证了命令行的正确性后,bash和watch能够周期性地自动执行它们,不需要再次键入。

性能统计信息的绘图与分析
除了记录与自动化工具之外,Linux还提供了强大的分析工具帮助你理解性能统计数据的含义。尽管大多数性能工具可以把性能统计数据输出为文本,但是想要发现其中的模式和随时间变化的趋势并不总是件容易的事儿。Linux提供的gnumeric电子表格很强大,它可以对性能数据进行导入、分析和绘图。当你绘制数据图时,性能问题的原因可能会变得明晰,或者至少能揭示调查的新角度。

调查应用程序使用的库
还有一些Linux的工具能使你确定应用程序使用了哪些库,以及显示给定库提供的所有函数。ldd命令给出一个特定应用程序使用的全部共享库的列表。在你想要跟踪被应用程序使用的库的数量和位置时,这个命令很有用。Linux中还有一个命令objdump,它可以在指定库或应用程序中搜索并显示其提供的全部函数。ltrace只能给出一个应用程序调用函数的名称,但是结合命令ldd和objdump,你就能够利用ltrace的输出来确定指定函数属于哪个库。

创建和调试应用程序
最后,Linux还为你提供了能够创建性能工具友好型应用程序的工具,以及交互式调试和调查运行中应用程序属性的工具。GNU编译器集(gcc)可以在应用程序中插入调试信息,以帮助oprofile找出某个具体性能问题对应的代码行和源文件。此外,GNU调试器(gdb)还可以用来查找被各种性能工具默认不可得的应用程序的运行时信息。

bash循环

尽管vmstat和sar等都提供了周期性更新统计数据的功能,
但是ps和ifconfig等却没有提供周期性统计功能。
此时我们可以使用bash的循环语句来实现统计:

while true;do sleep 1; ifconfig eth0 | grep "RX packets";done;

bash循环的语法如下:

#!/usr/bin/bash
for name in Tom Dick Harry Joe
do echo "Hi, $name"
done
echo "Out of loop."
格式while command
docommands
done

tee

tee是输出重定向的高级版本,
普通输出重定向到文件后,屏幕就不再输出了,
但是tee既能重定向到文件,又能显示到屏幕上。

vmstat | tee ~/test.txt

script

script的作用是,保存在终端操作的所有输入和输出,到文本中。


接下来使用cat显示a.txt:

cat a.txt

watch

watch每秒执行一次命令并输出到屏幕上

watch -d "ps"

gnumeric

gnu版电子表格。

使用方法就是通过file导入文件,然后生成图形。

ldd

ldd用于显示特定二进制文件依赖的是哪些库。

ldd /bin/ls
linux-vdso.so.1 (0x00007ffe1ecc3000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f5de973d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5de954b000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f5de94bb000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5de94b5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5de97af000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5de9492000)

前边是库名,后边是库地址,最后是库在内存中的地址。

objdump

objdump的功能之一就是查看库中有哪些函数。

objdump -T /usr/lib/libgtk.so | fgrep .text

使用fgrep筛选出.text段

gdb

gdb是一个很棒的应用程序调试器,它可以帮助调查一个正在运行的应用程序的多个不同方面。gdb具备三个特性使得它对诊断性能问题来说非常有价值。第一,gdb可以附加到当前正在运行的进程。第二,gdb可以展示该进程的回溯,即显示当前源代码行和调用树。附加到进程并抽取其回溯可以迅速找出一些比较明显的性能问题。但是,如果应用程序不是卡在单点上,那么使用gdb就难以进行问题诊断,此时,系统级的分析器,如oprofile,将会是一个更好的选择。第三,gdb可以将虚拟地址映射回特定的函数。与性能工具相比,gdb更擅长计算虚拟地址的位置。例如,如果oprofile给出了事件发生的虚拟地址而非函数名,那么gdb就可以计算出该地址的函数。
gdb用如下命令行调用,其中,pid是指gdb将要附加的进程:

gdb -p pid

gdb附加到该进程后,它就进入到交互模式,这时就可以检查给定进程的当前执行位置和运行时变量。表8-4对其中的一条命令进行了说明,可用其检查正在运行的进程。

想要研究gdb是如何工作的,可以先在一个简单的测试应用程序上演示它。清单8.9中的程序在main中只调用了函数a(),并陷入了一个无限循环。这个程序不会结束,因此当我们将gdb附加上去后,它将会一直执行函数a()的无限循环。

清单8.10启动应用程序并用gdb附加到它的pid。我们要求gdb产生一个回溯,以便展示当前正在执行的究竟是哪条代码,以及哪组函数调用会导致当前的位置。如同预期的,gdb显示出正在执行的是无限循环a(),它是由main()调用的。

最后,在清单8.11中,我们要求gdb给出虚拟地址0x0804832F的位置,而gdb显示该地址是函数main的一部分。

gdb是一个极其强大的调试器,可以帮助调查性能问题。如果你想要知道特定代码路径发生的确切原因,那么gdb甚至在性能问题已经确定之后也能够发挥作用。

gcc

gcc提供的性能优化选项通过多种优化来调整已编译的二进制文件的性能,这些优化包括:架构通用优化(使用-01、-02、-03),特定架构优化(-march和-mcpu),以及基于反馈的优化(使用-fprofile-arcs和-fbranch -probabilities)。更多的优化选项详情请参阅gcc手册页。

Linux性能分析工具相关推荐

  1. Linux性能分析工具详解

    Linux性能分析工具详解 一.tcpdump 常用用法: 这里用sudo因为当前帐号无权使用tcpdump,这里仅以一个tcp的例子来说明:sudo /usr/sbin/tcpdump tcp po ...

  2. Linux 性能分析工具汇总

    Linux 性能分析工具汇总 我从cnaaa.com购买了服务器. 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系 ...

  3. Linux性能分析工具与图形化方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...

  4. Linux性能分析工具汇总

    Linux针对性能调优设计了许多分析工具,这些工具对于分析整个系统性能可提供巨大的帮助.影响性能的因素有cache.I/O,系统调用,系统内核.CPU性能等等.比如某些程序无法充分利用 cache,从 ...

  5. Linux性能分析工具perf基础使用介绍

    perf是Linux内核内置的性能分析工具.从内核版本2.6.31开始出现该工具,如果没有安装,可以使用以下命令进行安装 yum -y install perf.x86_64 这里我们主要介绍一下如何 ...

  6. linux 性能分析工具perf

    perf 性能监控分析工具 perf 工具下载 https://cdn.kernel.org/pub/linux/kernel/tools/perf/v5.9.0/perf-5.9.0.tar.gz ...

  7. 2022最火的Linux性能分析工具--perf

    ►►► 介绍 perf是Linux性能分析中,比较常用的一款工具.它基于时间采集原理,以性能事件为基础,支持针对CPU处理器相关性能指标与操作系统相关性能指标的性能分析.常被用来查找.定位源码级性能问 ...

  8. (转)超全整理!Linux性能分析工具汇总合集

    原文地址:https://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇 ...

  9. linux性能分析工具总结(初级工具篇)

    1.uptime uptime命令是用来查询linux系统负载的! 用法:直接输入uptime即可. 另外还有一个参数 -V(大写),是用来查询版本的 procps是一个实用程序包,主要包括ps to ...

  10. Linux性能分析工具top命令详解

    top命令是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,常用于服务端性能分析. top命令说明: top命令的结果分为两部分: 统计信息:前五行是系统的整体统计信息. ...

最新文章

  1. java调用oracle的函数,从Java调用Oracle函数
  2. linux 网络在线升级,linux在线升级
  3. [Python] 程序结构与控制流
  4. 简单描述char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别
  5. 中医科学院院士团队解析丹参纯合基因组和新基因簇在丹参酮合成中的作用
  6. 43 SD配置-销售凭证设置-定义状态管理授权码
  7. PHP伪造referer突破网盘禁止外链(附115源码)
  8. php中array_merge函数
  9. php制作日历的代码,php日历制作代码分享_PHP教程
  10. zemax输出ies_基于ZEMAX的光学设计教程(第2版)
  11. HttpClient的使用与连接资源释放
  12. 《一个广告人的自白》读书笔记
  13. 教程 | Rhino Compute Sevice介绍及环境搭建
  14. mac升级python版本_Mac上python如何升级?
  15. 【Unity】Obi插件系列(六)——Obi Rope
  16. java实现支付宝扫码支付详细步骤
  17. Java微服务框架一览
  18. unity中3dUI或者模型始终面向摄像机,跟随摄像机视角旋转丨视角跟随丨固定视角
  19. hdu 5984 Pocky
  20. 在 CSDN 博客 100 天技术日更的 Flag,我做到了!

热门文章

  1. 我的世界使用mysql数据库_mysql数据库常用命令笔记
  2. MySQL 数据库 day-03
  3. ios android的中文翻译,苹果 iOS 14 Beta反向翻译,拒不承认iOS不如安卓
  4. jav皮卡_前5名:12个模因,皮卡第,AMP打开还是关闭? 和更多
  5. 例子4.11 从键盘输入一个大写字母,要求改用小写字母输出
  6. 汉诺塔详解(超详细)
  7. 理解inux 下 intel处理器睿频
  8. TFT-LCD LVGL与硬件交互
  9. 智慧管廊监控与报警管控一体化系统解决方案
  10. 懒癌治疗仪 - 写在前面