本网站相关文章:

DD3 and DDR4

DDR4

  • 起跳频率 2133MHZ
  • 采用 haswell 平台,注意,每一次内存的更新换代都伴随着处理器的升级
  • 整个内存的外观发生变化

DDR3

DDR3 是一种计算机内存规格。它属于 SDRAM 家族的内存产品,提供了相较于 DDR2 SDRAM 更高的运行效能与更低的电压, 是 DDR2 SDRAM(同步动态动态随机存取内存)的后继者(增加至八倍),也是现时流行的内存产品规格

对比

从带宽角度看待两者区别:

  • DDR4 每一个针脚提供 2GBps, 即256Mb/S的带宽;
  • DDR3-1866 每一个针脚提供 0.6GBps, 即60MB/s的带宽

从容量角度看待:

  • DDR1 容量标准为 64M 到 1G
  • DDR3 容量标准为 512M 到 8G
  • DDR4 的单条内存容量可以达到8*8或者 128G

Hugepages

说明

配置

  1. Centos6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1 hugepages设置
# 编辑/etc/sysctl.conf文件:
vm.hr_hugepages = 256

# 2 挂载hugepages文件系统
mkdir /mnt/huge
chmod 777 /mnt/huge
vim /etc/fstab,添加一行:
huge /mnt/huge hugetlbfs defaults 0 0

# 3 查看
grep -i huge /proc/meminfo

# 4 立即生效方式(生效)
echo 256 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
umount /mnt/huge ; mount -t hugetlbfs nodev /mnt/huge
  1. Centos7
1
2
3
4
5
6
7
8
# 关闭THP
vim /etc/rc.local文件:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

内存监控

top 命令

top 命令是 Linux 下常用的性能分析工具, 能够实时显示系统中各个进程的资源占用状况, 类似于 Windows 的任务管理器. top 命令是一个动态显示过程,即可以通过用户按键来不断刷新当前状态. 如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.

top 命令提供了实时的对系统处理器的状态监视.它将显示系统中 CPU 最”敏感”的任务列表. 该命令可以按 CPU 使用, 内存使用和执行时间对任务进行排序; 该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. 另外, 内存监控的很多应用往往和 CPU 监控室一致的, 这两者在一定程度上是互相影响的.

  1. 输出分析,其中进程相关字段的说明见top笔记.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
top - 09:14:56 up 264 days, 20:56,  1 user,  load average: 0.02, 0.04, 0.00
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 377672k total, 322332k used, 55340k free, 32592k buffers
Swap: 397308k total, 67192k used, 330116k free, 71900k cached

# 第一行
09:14:56 : 系统当前时间
264 days, 20:56 : 系统开机到现在经过了多少时间
1 users : 当前2用户在线
load average: 0.02, 0.04, 0.00: 系统1分钟, 5分钟, 15分钟的CPU负载信息

# 第二行见cpu monitor 笔记

# 第三行见cpu monitor 笔记

# 第四行(见free中的说明)
Men: 内存的意思
8175320kk total: 物理内存总量
8058868k used: 使用的物理内存量
116452k free: 空闲的物理内存量
283084k buffers: 用作内核缓存的物理内存量

第五行
Swap: 交换空间
6881272k total: 交换区总量
4010444k used: 使用的交换区量
2870828k free: 空闲的交换区量
4336992k cached: 缓冲交换区总量
  1. 按键说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<Space>: 立即刷新
?: 帮助命令
q: 退出
W: 保存此次对top的设置到文件~/.toprc, 下次启动将自动调用toprc文件的设置, 这个非常有用

# 排序相关
M: 按%MEM排序, 注意和m的差别, 该选项才是查看常驻内存的正确选项
P: 按%CPU使用率排序
N: 按PID的大小顺序进行排序
T: 按TIME+累计时间进行排序
S: 累计模式, 会把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+

# 格式化
f: 增加或减少进程显示标志, 此时会进入选择页面, 此时鼠标右键选取项, 然后上下方向键移动显示项即可
x: 在已经排序的前提下对排序列进行高亮操作
O: 条件过滤, 这个非常有用

# 显示相关
ctrl + L: 擦除并重写屏幕
s: 设置刷新时间间隔
l: 显示或隐藏uptime信息

# 隐藏和显示
m: 显示或隐藏内存状态信息
u: 指定显示用户进程
i: 只显示正在运行的进程
c: 显示命令完全模式
t: 显示或隐藏进程和CPU状态信息
  1. 示例

a. 监控指定进程的所有 top 信息

1
2
3
4
5
6
7
# 1. 多核CPU监控
# a. 数字键"1", 显示所有CPU信息
# b. t, 显示或者隐藏CPU信息

# 2. 监控指定进程, 有用, 不过首先要获取应用进程ID
pgrep 应用程序名
top -p pid1

b. 监控指定进程名的所有 top 信息, 注意, 行数不能超过 20, 否则失败

1
top -p `pgrep celery | tr "\\n" "," | sed 's/,$//'`

c. 减少刷新频率, 这个非常有用, 避免频繁刷新: top -d 30, 单位为秒, 默认是 1

d. 条件过滤使用说明, 这个在平常查看进程的时候使用非常频繁, 若想要请求所有过滤条件则按=

1
2
3
# 1. 过滤celery, 先按O, 然后输入过滤条件: COMMAND=celery
# 2. 反向过滤, 先按O, 输入: !COMMAND=celery
# 3. 逻辑过滤, 匹配CPU占有率>3%的进程, 先按O, 输入: %CPU>3.0

其中过滤搜索仅仅为当前显示的列中的信息, 若是 COMMAND 过长被自动截断时, 截断的信息不会被搜索到.

e. 设置命令显示的长度, 一般越长越好, 但是有最大值, 超过就会显示命令异常

1
2
3
4
# 1. 设置每一列宽度
top -c -w 300

# 2. 若是COMMAND还未显示完全则可以隐藏某些列

htop

htop 是 top 命令的升级版, 性能统计查看, 横向或者纵向滚动进程列表, 更加好用直观, 跨平台兼容更好. htop 相比 top 命令有如下优势:

  • htop 命令在 macos 和 linux 平台上的输出相同, 操作命令相同, 这点在开发过程中非常重要
  • htop 的行输出不会被截断, 可以横向和纵向的滚动进程列表, 对于长 COMMAND, top 直接会截断显示而 htop 则可以显示所有, 这点也非常重要, 特别是在搜索某些应用程序的时候很有用
  • htop 更加美观并且支持鼠标操作

但是, 该命令也有一些缺点, 其操作命令同 top 完全不一样, 上手难度有点高, 另外, 系统不会预安装该命令. htop 命令输出大体同 top 一致, 这里就不再讲述.

  1. 命令参数, 这点也不同于 top, 后者的一些选项也可以通过按键实现, 这点后者优于前者
  • -C --no-color: 单色显示输出, 黑白
  • -d --delay=DELAY: 设置更新延时, 其单位是 100ms, 即值为 10 的时候表示 1S, 最大值为 10S, 该选项类似 top 的-d
  • -s --sort-key=COLUMN: 纵列排序
  • -u --user=USERNAME: 只显示指定用户
  • -p --pid=PID: 只显示指定进程
  1. 按键说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
h,?     F1  查看帮助
<space> 标记/取消一个进程, 之后可以对进程使用命令, 例如kill
U 取消标记的所有进程

# a. 界面移动: 上下左右方向键用以移动输出显示块

# b. 排序
I 正序或者倒序, 按照PID来进行排序
M 按照内存占用排序, 同top命令, 默认按照PID排序
P 按照CPU占用排序
, F6 选择排序方式, 选择需要排序的列 + Enter即可

# c. 搜索和过滤
/ 搜索字符但是不会过滤其他进程, 搭配F3来进行跳转, 不好用
\ F4 过滤器, 比较好用

# 显示和隐藏
H 显示或隐藏用户线程
t F5 显示树行结构, 这是macos上htop的默认选项, 搭配H选项可以清晰的展示进程关系
l 显示指定进程打开所有文件描述符, 其搭配lsof显示, 非常好用
K 显示或者隐藏内核线程, 这个也非常有用, 一般排查时都不看内核线程, 默认是不显示

# 高级用法
s 调用strace追踪进程的系统调用, 我觉得不建议这样做, 还不如直接使用strace命令
k F9 杀死指定的进程, 慎用
S F2 进入设置页面, 关于设置的说明见下文说明
  1. 设置

按下F2后进行自定义显示配置页面进行个性化配置:

  • Meters 项: 设置顶部显示
  • Displaty options: 选择显示的内容
  • Colors: 主题更换
  • Colums: 增加或者显示列, 同 top 命令的 f 格式化按键

最后, htop 自动保存上一次的配置, 无需像 top 那样需要保存.

free

关于 free 命令的输出可以见内存相关术语中的详细说明, 这里再次简单介绍并做一些测试说明.

1
2
3
4
5
6
7
FO[2][1] = 24677460
FO[3][2] = 10321516

total used free shared buffers cached
Mem: 24677460 23276064 1401396 0 870540 12084008
-/+ buffers/cache: 10321516 14355944
Swap: 25151484 224188 24927296

从 OS 的角度分析上面的输出:

1
2
3
4
5
6
7
8
9
10
24677460KB(缺省时free的单位为KB)物理内存, 即FO[2][1];
23276064KB(即FO[2][2])被使用的空间
1401396KB(即FO[2][3])是可用的空间

第一个等式:
FO[2][1] = FO[2][2] + FO[2][3]

另外两个等式:
FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

Linux 和其他成熟的操作系统(例如 windows), 为了提高 IO read 的性能, 总是要多 cache 一些数据, 这也就是为什么FO[2][6](cached memory)比较大, 而FO[2][3]比较小的原因. 我们可以做一个简单的测试

1
2
3
4
5
6
7
8
9
10
#0 创建大文件
dd if=/dev/zero of=test.log bs=1M count=50
#1 释放掉被系统cache占用的数据:
echo 3>/proc/sys/vm/drop_caches
#2 读一个大文件, 并记录时间
time cat test.log >/dev/null
#3 释放cache
echo 1 > /proc/sys/vm/drop_caches
#4 重读这个大文件, 并记录时间
time cat test.log >/dev/null

从结果可以看出, 第二次读应该比第一次快很多. 原来我做过一个 BerkeleyDB 的读操作, 大概要读 5G 的文件, 几千万条记录. 在我的环境上, 第二次读比第一次大概可以快 9 倍左右.

sar 历史内存

sar 获取系统的历史内存压力, 用于检测和查看系统瓶颈, 其输出说明如下

  • kbcommit 应用程序使用内存大小(used)
  • %commit 内存使用百分比
  1. uptime

获取系统的负载, 系统开机时间, 其输出说明如下

1
2
当前时间   系统总运行时间   用户在线数  系统平均负载: 1分钟, 5分钟, 10分钟
17:48:17 up 13:37, 1 user, load average: 0.12, 0.25, 0.26
  1. vmstat

Report virtual memory statistics. Reports information about process, memory, paging, block IO, traps, disks and cpu activity. The first report produced gives averages since the last reboot. 其输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
1 0 0 513508 282512 2590320 0 0 5 12 2 103 3 0 97 0 0

# 各项说明如下
Procs
r: The number of runnable processes (running or waiting for run time). 运行队列.
b: The number of processes in uninterruptible(不间断)sleep. 阻塞进程.

Memory
swpd: the amount of virtual memory used.
free: the amount of idle(闲置) memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)

Swap
si: Amount of memory swapped in from disk (/s). 就是swap-in.
so: Amount of memory swapped to disk (/s). 就是swap-out.

IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).

System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second. 每秒上下文切换次数, 线程切换, 进程切换, 尽可能越小越好.

CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

实例:

1
2
3
4
# 每三秒输出一条结果
vmstat 3
# 输出的active/inactive的值
vmstat -a 3
  1. vm_stat

Mac 上的 vmstat 替代, 示例:

1
2
3
4
# 统计
vm_stat
# 每三秒输出一条结果
vm_stat 3

参考