问题一
OOM和内存回收
内存紧张时,会采用三种方式来回收内存
1.LRU算法来回收缓存
2.swap机制来回收不常访问的内存页
3.OOM机制 (oom_score给进程打分)
活跃和非活跃的内存页,按照类型的不同,又分为文件页和匿名页。
问题二
文件系统和磁盘的区别
磁盘是块设备,可以被划分成不同的分区。而在磁盘或磁盘分区上,还可以创建文件系统,并且挂载到系统的某个目录。这样,系统就可以通过这个挂载目录,来读写文件。
在读写普通文件时,IO请求会首先经过文件系统,然后由文件系统负责,来和磁盘进行交互。
而在读写块设备文件时,会跳过文件系统,直接和磁盘交互,也就是所谓的“裸IO”。
问题3:
如何统计所有进程的物理内存使用量
有同学采用把所有进程的RSS都相加得出结果,实际上导致不少地方被重复计算。RSS表示常驻内存,把进程用到的共享内存也算了进去。
每个进程的PSS,是指把共享内存平分到各个进程后,再加上进程本身的非共享内存大小的和;这样直接累加PSS,就不用担心共享内存重复计算的问题了。
grep Pss /proc/[1-9]*/smaps | awk '{total+=$2};END {printf "%d kB\n",total}'
问题4
在centos 7上安装bcc-tools
问题5
内存泄漏的优化方法
valgrind
tcmalloc
bcc-tools中memleak工具