展开

关键词

操作系统原理:How Linux Works(三):Memory

Linux 内存的分类 Linux 内存的计算 Linux 进程的内存 Linux 应用内存分配 内存是计算机中与CPU进行沟通的桥梁,用于暂时存放CPU中的运算数据。 Linux 内核的内存管理机制设计得非常精妙,对于 Linux 内核的性能有很大影响。 用户内存 = Active(file) + Inactive(file) + Active(anon) + Inactive(anon) + Unevictable = buffers + cached Active(anon): 1120720 kB Inactive(anon): 314156 kB -bash-4.3$ -bash-4.3$ cat /proc/meminfo | grep 4 4 0 r-x-- [ anon ] ffffffffff600000 4 0 0 r-x-- [ anon ] (部分省略)

84880

示例展示虚拟内存和物理内存的分配

通过前两篇文章(系统调用mmap的内核实现分析,Linux下Page Fault的处理流程)我们可以知道,虚拟内存是在我们向操作系统申请内存(比如malloc或mmap)时分配的,而物理内存是在我们使用 ] 00007ffff00f1000 4 4 0 r-x-- [ anon ] ---------------- ------- ------- ------- 当程序输出3时,此时我们已经对p对应的地址空间赋值,也就是使用了虚拟内存的第一个page,对应看pmap命令的第三次输出,此时的[ anon ]区域(第74行)显示物理内存已使用4k。 当程序输出4时,此时我们已经对虚拟内存的第二个page进行了写操作,对应看pmap命令的第四次输出,此时的[ anon ]区域(第103行)显示已使用的物理内存是8k。 再推荐下我们之前推荐过的一篇文章,讲的也是linux内核对进程内存的分配、管理等,相信这次你会更加理解这篇文章。

47610
  • 广告
    关闭

    腾讯云618采购季来袭!

    一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java堆外内存排查小结

    PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 使用ps查看进程使用的内存和虚拟内存 ( Linux 65536 55820 55820 rwx-- [ anon ]00007fa044000000 65536 55896 55896 rwx-- [ anon ]00007fa0c0000000 65536 56304 56304 rwx-- [ anon ]00007f9db8000000 65536 56360 56360 rwx-- [ anon ]00007fa0b8000000 65536 65536 65536 rwx-- [ anon ]000000073c800000 3119140 2488596 2487228 rwx-- [ anon ]total kB 17629516 7384476 7377520 通过google,找到以下资料 Linux glibc >= 2.10 (RHEL 6) malloc may show excessive

    2K30

    Linux性能测试 pmap命令详解

    w=write, x=execute, s=shared, p=private (copy on write) Mapping: file backing the map , or '[ anon 映像支持文件,[anon]为已分配内存 [stack]为程序堆栈 Offset: offset into the file 文件偏移 Device: device name (major ] b7f5d000 8 rw--- 00000000b7f5d000 000:00000 [ anon ] bffee000 72 rw--- 00000000bffee000 000: ] b7f5d000 8 rw--- 00000000b7f5d000 000:00000 [ anon ] bffee000 72 rw--- 00000000bffee000 000: writeable/private: 2028K shared: 0K mapped: 5412K writeable/private: 2028K shared: 0K 总结 以上所述是小编给大家介绍的Linux

    2.1K10

    系统调用mmap的内核实现分析

    ] 00007fffd1f07000 4 4 0 r-x-- [ anon ] ---------------- ------- ------- ------- ] 00007fffd1f07000 4 4 0 r-x-- [ anon ] ---------------- ------- ------- ------- populate, &uf); ... } return ret; } 该方法又调用了do_mmap_pgoff: // include/linux 之后,如果我们是想mmap一个file,则调用call_mmap: // include/linux/fs.h static inline int call_mmap(struct file *file 再回到上面的mmap_region方法,如果我们mmap的是一块anonymous的内存区域,则会调用vma_set_anonymous方法: // include/linux/mm.h static

    1.4K10

    Linux Used内存到底哪里去了?

    proc/[pid]/status) share shared pages (from shared mappings) text text (code) lib library (unused in Linux 2.6) data data + stack dt dirty pages (unused in Linux 2.6) resident set size 也就是每个进程用了具体的多少页的内存。 由于linux系统采用的是虚拟内存,进程的代码,库,堆和栈使用的内存都会消耗内存,但是申请出来的内存,只要没真正touch过,是不算的,因为没有真正为之分配物理页面。 ] 0000003ec5800000 1628K r-x-- /lib64/libc-2.12.so ... 0000003ec5b9c000 20K rw--- [ anon ] 4K r-x-- [ anon ] ffffffffff600000 4K r-x-- [ anon ] total 108720K 多出的171M

    86620

    Linux常用命令--系统状态篇

    前言 Linux常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题。本文就简单介绍一下这些命令。 查看系统版本相关信息--uname 例如: uname -a Linux ubuntu16.04 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 从结果可以看到操作系统版本(ubuntu16.04),CPU类型(x86_64)等信息 查看当前环境变量 ] 00007fc3847b2000 152K r-x-- ld-2.23.so 00007fc3849b9000 12K rw--- [ anon ] 00007fc3849d7000 8K r-x-- [ anon ] ffffffffff600000 4K r-x-- [ anon ] total 4356K 我们可以根据进程各部分占用空间情况

    25750

    如何查看Linux系统的状态信息?

    前言 Linux常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题。本文就简单介绍一下这些命令。 查看系统版本相关信息--uname 例如: uname -a Linux ubuntu16.04 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 从结果可以看到操作系统版本(ubuntu16.04),CPU类型(x86_64)等信息。 8K r-x-- [ anon ] ffffffffff600000 4K r-x-- [ anon ] total 4356K 我们可以根据进程各部分占用空间情况 更多内容可参考《Linux中不可错过的信息宝库》。 本文仅介绍这些命令的经典使用,更多使用可通过man 命令查看。

    2K10

    Linux中进程内存与cgroup内存的统计

    Linux内核,对于进程的内存使用与Cgroup的内存使用统计有一些相同和不同的地方。 shared pages (i.e., backed by a file) text (4) text (code) lib (5) library (unused in Linux 2.6) data (6) data + stack dt (7) dirty pages (unused in Linux 2.6) 见函数proc_pid_statm (vma->vm_flags & VM_SHARED)) { anon = 1;///anon page ... if (anon) { inc_mm_counter(mm, anon_rss); page_add_new_anon_rmap(page, vma, address); } else

    7830

    聊聊 Linux 的内存统计

    所以下文直接就找一台 Intel x86_64 架构下安装了 64bit Linux 系统的服务器作为例进行相关的实验和结果分析。 但是,tmpfs 背后并没有真实的磁盘文件存在,如果想要被临时释放出来,只能通过Swap的方式,所以内存页被链接到了Inactive(anon)和Active(anon)里。 也就是说,共享内存的页面属于File-backed Pages,但是被放在Inactive(anon)和Active(anon)链表里,统计也不算在AnonPages里,而是算在Cached和Mapped 所以从数值上看,Inactive(anon)项 + Active(anon)项 不等于AnonPages项,因为前者包括共享内存的部分。 (anon)里)。

    2K40

    Linux 内存使用率

    文章参考: 1、正确计算linux系统内存使用率 2、Linux系统内存消失与slab使用之谜 例如当前主机内存信息如下: 1 [zhang@test ~]$ cat /proc/meminfo SwapCached: 0 kB 8 Active: 21935144 kB 9 Inactive: 11190500 kB 10 Active(anon ): 18008032 kB 11 Inactive(anon): 324 kB 12 Active(file): 3927112 kB 13 Inactive(file): 11190176 在linux内核中会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry。

    75020

    docker cgroup 技术之memory(首篇)

    memory基础知识   以32位系统为例讲解下linux内存分布。 (file)和匿名映射(anon),所以LRU上的内存也就分为了Active(anon)、Inactive(anon)、Active(file)和Inactive(file)4种类型,对应memory.stat /proc/meminfo文件中一般只要关注与LRU相关的内存即可,即Active(anon)、Inactive(anon)、Active(file)和Inactive(file)。 AnonPages表示不包含Shmem的匿名映射,AnonPages=Active(anon)+Inactive(anon)-Shmem “Mlocked”统计的是被mlock()系统调用锁定的内存大小 由于swap会影响进程处理内存的效率,对内存进行锁定可以避免这段进程被交换到硬盘,增加数据处理效率 linux进程内存空间 32位系统下,linux中所有进程使用的内存布局如下: ?

    61530

    Linux 内存参数详细说明

    Linux 下 free 命令可以看出系统当前内存状况,附上 -k , -m , -g 可以分别输出对应单位的内存状况: Usage: free [options] Options: -b, gigabytes --tera show output in terabytes --peta show output in petabytes 以某台 Linux 这大致就是 Linux 下内存各项参数的含义,还有更复杂的参数,未来遇到新的场景时再做补充。 1370440 kB //活跃使用中的高速缓冲存储器页面文件大小 Inactive: 1506936 kB //不经常使用的高速缓冲存储器页面文件大小 Active(anon ): 163452 kB Inactive(anon): 216 kB Active(file): 1206988 kB Inactive(file): 1506720 kB

    43630

    CPU & Memory, Part 4: NUMA support

    所以,Linux允许每个进程自己设定内存分配规则。 =1 dirty=1 mapped=2 N3=2 00506000 default heap anon=3 dirty=3 active=0 N3=3 38a9000000 default file=/ lib64/ld-2.4.so mapped=22 mapmax=47 N1=22 38a9119000 default file=/lib64/ld-2.4.so anon=1 dirty=1 N3= =1 dirty=1 mapped=3 mapmax=32 N1=2 N3=1 38a9443000 default file=/lib64/libc-2.4.so anon=1 dirty=1 N3= 1 38a9444000 default anon=4 dirty=4 active=0 N3=4 2b2bbcdce000 default anon=1 dirty=1 N3=1 2b2bbcde4000

    36700

    每天学一个 Linux 命令(49):free

    昨日推荐:每天学一个 Linux 命令(48):top 命令简介 free 命令用于显示内存的使用情况,显示可用和已用物理内存和交换内存的总数,以及内核使用的缓冲区。 如果应用程序需要内存空间时,Linux 会将缓存让出给程序使用,从而使内存达到最大化的利用率。 321280 kB SwapCached: 0 kB Active: 229996 kB Inactive: 132264 kB Active(anon ): 39304 kB Inactive(anon): 7352 kB Active(file): 190692 kB Inactive(file): 124912 kB 命令(46):du 每天学一个 Linux 命令(47):df

    17910

    为什么java程序占用那么多内存

    查看内存映射 linux服务器提供了查看内存映射关系的命令pmap pmap(选项)(参数) 选项 -x:显示扩展格式; -d:显示设备格式; -q:不显示头尾行; -V:显示指定版本。 映像支持文件,[anon]为已分配内存[stack]为程序堆栈 Offset: offset into the file 文件偏移 Device: device name(major:minor) 同时还有大量的6xxxx大小Kbytes,Mapping为[anon]的块。 我将这些分配内存的块大小都加起来,最终大小是32GB,说明除了我申请的16GB内存,程序又额外申请了16GB内存。 计算分配内存大小的命令: pmap -x pid | grep anon | awk ' { mem = mem + $2;print $0} END {print mem/1024/1024,"GB 经过一番google,找到了这篇文章 red had 6.0发行版说明-13 编译器及工具 Red Hat Enterprise Linux 6 features version 2.11 of glibc

    1.3K10

    Hacker基础之Linux篇:基础Linux命令十六

    今天我们来学习几个小知识,不一定是Linux的命令,都是用于查看Linux的系统信息的 这也是我们的<Hacker基础之Linux篇:基础Linux命令>的最后一篇 下一节我们会介绍<Hacker基础之 Linux篇:进阶Linux命令> 查看Linux的CPU的信息 如何查看CPU的信息呢,我们可以这样 cat /proc/cpuinfo 这里我们可以找到我们的CPU的具体型号之类的详细信息 返回值是这样的 155340 kB SwapCached: 0 kB Active: 199820 kB Inactive: 114908 kB Active(anon ): 32308 kB Inactive(anon): 236 kB Active(file): 167512 kB Inactive(file): 114672 kB 篇:基础Linux命令>系列就完结了 下面我们会介绍更高级的内容 <Hacker基础之Linux篇:进阶Linux命令>

    46330

    TKE中在节点上获取容器资源配置

    Linux 中,实现容器的边界,主要有两种技术 Cgroups 和 Namespace. Cgroups 用于对运行的容器进行资源的限制,Namespace 则会将容器隔离起来,实现边界。 这里可以查看cpu,内存,我们拿查看内存举例,/proc/meminfo是了解Linux系统内存使用状况的主要接口,那么我们如何查看容器的这个接口文件获取容器的内存数据来进行统计。 0 kB SwapCached: 0 kB Active: 0 kB Inactive: 0 kB Active(anon ): 0 kB Inactive(anon): 0 kB Active(file): 0 kB Inactive(file): 0 kB

    26840

    Java岗大厂面试百日冲刺【Day43】— Shrio1 (日积月累,每日三题)

    开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux --指定URL级别拦截策略 --> <property name="filterChainDefinitions"> <value> /css/ = anon /js/ = anon /images/ = anon /validatecode.jsp = anon /login.jsp = anon /user/userlogin = anon /user/deleteUser = perms["user-delete"] /** = authc </value> </property> 正常情况下,没有授权会跳转到为授权(登录)页面 anon:表示不拦截(匿名用户可访问

    7840

    shiro整合swagger需要注意的点

    ("/login/logout", "anon"); filterChainDefinitionMap.put("/error", "anon"); filterChainDefinitionMap.put ", "anon"); filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon"); 重新打开shiro,运行,swagger2 ("/login/logout", "anon"); filterChainDefinitionMap.put("/error", "anon"); //swagger放行 ("/swagger-resources", "anon"); filterChainDefinitionMap.put("/v2/api-docs", "anon"); ("/configuration/security", "anon"); filterChainDefinitionMap.put("/configuration/ui", "anon"

    2.3K20

    相关产品

    • TencentOS Server

      TencentOS Server

      腾讯服务器操作系统(TencentOS Server,TS)是腾讯云推出的Linux操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云CVM全规格实例上,包括黑石2.0服务器。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券