Skip to content

Commit f6f0f6a

Browse files
feat(tools): 添加性能优化工具 smem
- 新增 smem.py 文件,实现了一个详细的内存报告工具 - 该工具可以显示进程、用户、系统级别的内存使用情况 - 支持多种排序方式和自定义列显示 - 可用于性能分析和内存优化
1 parent a1d1587 commit f6f0f6a

File tree

4 files changed

+115
-2
lines changed

4 files changed

+115
-2
lines changed

linux/linux-performance.adoc

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,26 @@ endif::rootpath[]
2424

2525
可以使用 `lscpu` 或者
2626

27-
`cat /proc/cpuinfo` 查看CPU信息
27+
`cat /proc/cpuinfo` 查看CPU信息
28+
29+
30+
==== pcstat
31+
32+
用来查看一个文件当前在内核中的缓存情况,以及缓存的命中率,通常用于排查那些需要读取文件频繁的程序,这些程序经常因为文件缓存命中率低而产生性能问题。
33+
34+
[source,bash]
35+
----
36+
pcstat /tmp/test.txt
37+
----
38+
39+
40+
41+
42+
43+
44+
45+
46+
47+
48+
49+

linux/performance-tools.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ image::linux/image-2025-02-27-11-42-32-481.png[]
156156

157157
|4
158158
|mpstat -P ALL 1
159-
|CPU情况:单个CPU很繁忙,意味着西安城扩展性糟糕
159+
|CPU情况:单个CPU很繁忙,意味着现在程序性能糟糕
160160

161161
|5
162162
|pidstat 1
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
:toc:
2+
3+
// 保证所有的目录层级都可以正常显示图片
4+
:path: linux/
5+
:imagesdir: ../image/
6+
7+
// 只有book调用的时候才会走到这里
8+
ifdef::rootpath[]
9+
:imagesdir: {rootpath}{path}{imagesdir}
10+
endif::rootpath[]
11+
12+
13+
== linux常见问题及排查手段
14+
15+
16+
=== CPU
17+
18+
19+
=== 内存
20+
21+
=== 内存缺页
22+
23+
在 Linux 系统中,缺页中断(Page Fault)是操作系统内存管理中的一个重要概念。当程序试图访问一个不在物理内存中的页面时,就会发生缺页中断。根据页面是否需要从磁盘加载到内存,缺页中断可以分为两种类型:主缺页(Major Page Fault)和次缺页(Minor Page Fault)。
24+
25+
==== 主缺页(Major Page Fault)
26+
27+
- **定义**:主缺页指的是那些需要从磁盘(如交换分区或文件系统)读取数据到物理内存的缺页中断。
28+
- **特点**:
29+
- 这种类型的缺页处理时间较长,因为它涉及到磁盘I/O操作。
30+
- 发生主缺页通常是因为被访问的数据之前已经被换出到了交换空间或者从未被加载进内存过。
31+
- **影响**:主缺页对性能的影响较大,因为磁盘I/O的速度远低于内存访问速度。
32+
33+
==== 次缺页(Minor Page Fault)
34+
35+
- **定义**:次缺页是指那些不需要从磁盘读取数据,而可以直接通过调整内存映射就能解决的缺页中断。
36+
- **特点**:
37+
- 这类缺页一般只需要在内存内部进行一些调整即可满足请求,例如将数据从其他部分的物理内存移动到所需位置。
38+
- 处理速度相对较快,因为它不涉及磁盘I/O操作。
39+
- **常见情况**:次缺页常常发生在程序启动初期,当程序开始运行并首次访问分配给它的内存区域时。
40+
41+
==== 查看进程的缺页信息
42+
43+
在 Linux 中,可以通过读取 `/proc/[pid]/stat` 文件来获取特定进程的缺页统计信息。其中,第12个字段表示的是次缺页次数(minflt),第13个字段表示的是主缺页次数(majflt)。
44+
45+
此外,使用 `ps`, `top` 或者 `vmstat` 等命令行工具也可以查看相关的信息。例如,使用 `ps` 命令:
46+
47+
[source,bash]
48+
----
49+
# 查看所有进程的缺页信息 ps -eo min_flt,maj_flt,cmd|more
50+
ps -o min_flt,maj_flt,pid,cmd -p <PID>
51+
# 查看进程每秒主缺页和次缺页
52+
pidstat -rm -f ./path/file
53+
----
54+
55+
这条命令会输出指定 PID 的进程的次缺页数、主缺页数、进程ID以及执行的命令。
56+
57+
理解主缺页和次缺页的区别有助于分析和优化程序的内存使用情况,尤其是对于那些对性能要求较高的应用程序来说,减少主缺页的发生可以显著提高程序的执行效率。
58+
59+
60+
61+
62+
=== 网络
63+
64+
65+
=== I/O
66+
67+
68+

tools/使用说明.adoc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
3+
4+
5+
6+
=== 性能调优工具
7+
8+
==== `smem.py`
9+
10+
结合watch命令,可以看出内存的变化情况,如果有一个进程在运行中使用的内存一直在增长那么就需要进行重点关注了。
11+
12+
[source, bash]
13+
----
14+
# 使用watch命令结合smem.py查看内存使用情况,每隔一秒刷新一次
15+
watch -n 1 -d "python3 smem.py -s rss"
16+
# 每隔一秒刷新一次,只显示使用内存最多的后10条
17+
watch -n 1 -d "python3 smem.py -s rss| tail -n 10"
18+
----
19+
20+
21+
22+
23+

0 commit comments

Comments
 (0)