6)cache和buffer
cache和buffer中文翻译都叫缓冲或缓存,但是他们是由区别的。
•cache是缓存从文件读写的信息。
•buffer是缓存从硬盘读写的信息。
可以通过cachestat和cachetop来查看cache信息(这两个命令都需要先安装bcc包,由于每种Linux的安装方法都不同,这里不进行介绍,读者可到网上下载安装)。cachestat提供了整个操作系统缓存的读写命中情况,cachetop提供了每个进程的缓存命中情况。缓存命中率是指直接通过缓存获取数据的请求次数与占所有数据请求次数的百分比。命中率越高,表示使用缓存带来的收益越高,应用程序的性能当然也越好。
# cachestat 1 3 TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB 2 0 2 1 17 279 2 0 2 1 17 279 2 0 2 1 17 279
参数请查看表3-10所示。
表3-10 cachestat参数
标记 |
解释 |
TOTAL |
总的 I/O 次数 |
MISSES |
缓存未命中的次数 |
HITS |
缓存命中的次数 |
DIRTIES |
新增到缓存中的脏页数 |
BUFFERS_MB |
Buffers 的大小,以 MB 为单位 |
CACHED_MB |
Cache 的大小,以 MB 为单位 |
# cachetop 11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort:HITS / Order: ascending PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT% 13029 root python 1 0 0 100.0% 0.0%
其中READ_HIT和WRITE_HIT,分别表示读和写的缓存命中率。
7)SWAP机制
SWAP是把系统硬盘作为内存使用的一种机制。在Linux上可以使用swapon -s命令查看当前系统中正在使用的交换空间和相关信息。
# swapon -s FilenameTypeSize Used Priority /swapfile file 9699604620 -2
系统通过参数swappiness来控制SWAP积极程度,可以通过。
# cat /proc/sys/vm/swappiness 60
来查看,这个值在0到100之间,默认为60。数值越大,说明越积极使用 SWAP;数值越小,说明越消极使用 SWAP。注意:但是并不是说swappiness=0,就不进行SWAP,而是使用SWAP的积极性。可以通过vmstat命令来查看系统的SWAP情况。
# vmstat procs-----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 10336 287032 16856 266904 0 9 556 278 155 452 15 4 79 2 0
其参数请查看表3-11所示。
表3-11 vmstat参数
标记 |
解释 |
swpd |
已经使用的交换内存(kb) |
free |
空闲的物理内存(kb) |
buff |
用作缓冲区的内存数(kb),暂存的数据 |
cache |
用作高速缓存的内存数(kb),将最近使用过的文件放在内存中 |
si |
自上次取样以来从磁盘交换出来的比特数 |
so |
自上次取样以来交换到磁盘的比特数 |
在这里si、so即为SWAP的数据。如图3-27所示,站在内存的角度来看si指的是从磁盘分配给内存的比特数,so表示内存还给硬盘的比特数。
图3-27 虚拟内存空间分配
扩展阅读:SAWP内存回收机制 •直接内存回收(静态回收)。当有大内存提出申请,直接回收内存。 •kswap0内存回收(动态回收)。pages_min 存储在/proc/sys/vm/min_free_kbytes中。 # cat /proc/sys/vm/min_free_kbytes 38488 pages_low = pages_min × 5/4,pages_high = pages_min × 3/2。参见图3-28所示。 图3-28 swap0内存回收 纵坐标为有一个进程pages_free,表示内存使用情况。每隔一段时间进行扫描,当发现当前pages_free<pages_low,就发起内存回收。 |
8)系统内存摘要信息
仍旧可以使用vmstat来查看系统内存摘要信息。
# vmstat -s 4312648 K total memory 1589480 K used memory 1764644 K active memory 1107684 K inactive memory 625492 K free memory 22880 K buffer memory 2074796 K swap cache 969960 K total swap 4620 K used swap 965340 K free swap 81312 non-nice user cpu ticks 27207 nice user cpu ticks 56108 system cpu ticks 4871600 idle cpu ticks 7258 io-wait cpu ticks 0 IRQ cpu ticks 3317 softirq cpu ticks 0 stolen cpu ticks 2337551 pages paged in 8028020 pages paged out 16 pages swapped in 1001 pages swapped out 3218309 interrupts 4614976 CPU context switches 1575877682 boot time 49574 forks
9)显示某个进程所用的内存情况
可以使用pmap <pid>来查看某个进程所用的内存情况。
# pmap 3785 3785: /usr/bin/python3 manage.py runserver 0.0.0.0:8000 --insecure 0000000000400000 3792K r-x-- python3.6 00000000009b3000 4K r---- python3.6 00000000009b4000 628K rw--- python3.6 0000000000a51000 204K rw--- [ anon ] 0000000000eba000 5236K rw--- [ anon ] 00007ff6e8000000 644K rw--- [ anon ] 00007ff6e80a1000 64892K ----- [ anon ] 00007ff6eca72000 44K r-x-- libnss_files-2.27.so 00007ff6eca7d000 2044K ----- libnss_files-2.27.so 00007ff6ecc7c000 4K r---- libnss_files-2.27.so 00007ff6ecc7d000 4K rw--- libnss_files-2.27.so 00007ff6ecc7e000 2588K rw--- [ anon ] 00007ff6ecf05000 4K ----- [ anon ] 00007ff6ecf06000 9984K rw--- [ anon ] …
10)显示10个消耗内存最多的进程
同CPU一样,也可以通过命令来显示10个消耗内存最多的进程。
# ps aux|sort -rnk +4|head -10 jerry 49301 0.3 4.2 921596 181256 tty2 SNl+ 02:25 0:13 /usr/bin/python3 /usr/bin/update-manager --no-update--no-focus-on-map jerry 2264 0.1 3.7 1399412 160552 tty2 SLl+ Dec08 0:18 /usr/bin/gnome-software --gapplication-service jerry 2044 0.8 3.7 3747824 162252 tty2 Sl+ Dec08 1:45 /usr/bin/gnome-shell gdm 1024 0.1 2.1 3378676 91928 tty1 Sl+ Dec08 0:13 /usr/bin/gnome-shell jerry 2260 0.0 2.0 1078900 90292 tty2 Sl+ Dec08 0:06 nautilus-desktop jerry 1915 0.2 1.5 463272 64864 tty2 Sl+ Dec08 0:35 /usr/lib/xorg/Xorgvt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset-keeptty -verbose 3 jerry 2306 0.0 1.2 892092 53404 ? Ssl Dec08 0:01 /usr/lib/evolution/evolution-calendar-factory root 1324 0.2 1.1 522060 49556 ? Ssl Dec08 0:29/usr/lib/packagekit/packagekitd jerry 2335 0.0 1.1 1135836 50004 ? Sl Dec08 0:01 /usr/lib/evolution/evolution-calendar-factory-subprocess--factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx2306x2--own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/2306/2 jerry 3785 1.4 0.8 176328 36240 pts/1 Sl+ 00:14 2:46 /usr/bin/python3manage.py runserver 0.0.0.0:8000 –insecure
11)小结
本节所涉及的概念有内核空间和用户空间、内核映射、虚拟内存空间分布、内存的分配和释放、查看内存使用情况、cache和buffer和SWAP机制。涉及到的命令有echo -16 > /proc/$(pidofsshd)/oom_adj、cat /proc/$(pidofsshd)/oom_adj、free、top、cachestat、cachetop、swapon、cat /proc/sys/vm/swappines、vmstat、cat/proc/sys/vm/min_free_kbytes、pmap <Pid>和ps aux|sort -rnk +4|head -10。
顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不同观念欢迎与顾翔老师交流!
投票已过期
1.以下你用过哪些集中配置管理系统?(多选)
- puppet
- Chef
- ansible
- saltstack
- Cfengine
- Capistrano
- Resque
- Rundeck
- Rundeck
- 其他
2.以下你用哪些过虚拟机或容器?(多选)
- VMware
- Vagrant
- Amazon EC2
- AMI(亚马逊云机器镜像)
- Vagrant
- Docker
- Rkt
- 裸金属服务器
- 其他
3.以下你用哪些操作系统自动化配置工具?(多选)
- Solaris10 JumpStart
- Kickstart
- Debian-Preseed
- 其他
4.以下你用哪些云平台?(多选)
- Amazon Web Services
- Google App Engine
- Windows Azure
- OpenShift
- Cloud Foundry
- AWS CloudFormation
- Microsoft Azure Stack
- OpenStack Heat
- 百度云
- 阿里云
- 腾讯云
- 其他
5.以下你用哪些CI/CD工具?(多选)
- Jenkins
- ThoughtWorks GoCD
- Atlassian Bamboo
- Microsoft Team Foundation Server
- TeamCity
- GitLab CI
- Travis CI
- SNAP CI
- Pivotal的Concourse
- Etsy的Morgue
- 其他
6.以下你用哪些管理工具?(多选)
- JIRA
- LeanKit
- Mingle
- 禅道
- 其他
7.以下你用哪些安全工具?(多选)
- Vault
- Keywhiz
- credstash
- Red October
- Metasploit
- OSSEC
- Tripwire
- Unhide
- OWASP ZAP Zed Attack Proxy Project
- Lynis
- The Browser Exploitation Framework
- OWASP Xenotix XSS Exploit Framework
- OWASP Offensive Testing Framework
- Brakeman
- WPScan
- nmap
- Burp Suite
- AWVS
- AppScan
- CSRFTester
- SQL Map
- Pangolin
- DirBuster
- 其他
8.以下你用哪些静态扫描工具?(多选)
- Sonar
- Brakeman
- Codeclimate
- CheckStyle
- 其他