Working Set Size (WSS) is how much memory an application needs to keep working. Your application may have 100 Gbytes of main memory allocated and page mapped, but it is only touching 50 Mbytes each second to do its job. That’s the working set size: the “hot” memory that is frequently used. It is useful to know for capacity planning and scalability analysis.
http://www.brendangregg.com/wss.html
http://www.brendangregg.com/blog/2018-01-17/measure-working-set-size.html
Working Set Size(WSS)是指一个app保持正常运行所须的内存。比如一个应用在初始阶段申请了100G主存,在实际正常运行时每秒只需要50M,那么这里的50M就是一个WSS。评估WSS能干嘛呢?它可以用来进行内存容量规划并进行必要的内存扩容或者软件优化。
这个问题并不新鲜而且非常重要,然而brendangregg却表示至今为止没有实际可用的有效工具
Linux top命令的输出中,有两列分别是VIRT与RES,其中VIRT是进程使用的虚拟内存地址空间大小,而RES则是实际使用的物理内存(如果考虑共享映射等,则需要用到smaps proc文件的PSS或者top命令的SHARE,不过这两者对于理解WSS无益,故不在此展开)。比如,一个进程刚启动时通过私有匿名映射了(map_flags=MAP_PRIVATE | MAP_ANON)100G内存,然后实际只访问其中50G,那么VIRT=100G,RES=50G。那么问题来了,如何评估这50G内存的访存频率呢?是否存在明显的冷热区分呢?针对这个问题,brendangregg开发了两款基于Linux系统的小工具, |
Method 1: Referenced Page flag
这是基于Linux Kernel 2.6.22引入的一个特性:the ability to set and read the referenced page flag from user space, added for analyzing memory usage. brendangregg大神基于此实现了一个https://github.com/brendangregg/wss wss.pl工具
https://www.sohu.com/a/285561871_467784
VSS:Virtual Set Size 虚拟耗用的内存(包含与其他进程共享占用的虚拟内存)
RSS:Resident Set Size 实际使用的物理内存(包含与其他进程共享占用的内存)
PSS:Proportional Set Size 实际使用的物理内存(按比例包含与其他进程共享占用的内存)
USS:Unique Set Size 进程独自占用的物理内存(不包含与其他进程共享占用的内存
https://blog.csdn.net/lhl_blog/article/details/89451082