原文:https://juejin.im/post/5c00aee06fb9a049be5d3641 小公司请求量小,但喜欢滥用内存,开一堆线程,大把大把往jvm塞对象,最终问题是内存溢出. 大公司并发大,但喜欢强调HA,所以通常保留swap,最终问题是服务卡顿. 而喜欢用全局集合变量的某些同仁,把java代码当c写,对象塞进去但忘了销毁,最终问题是内存泄漏. 如何避免? 合理参数.优雅代码.禁用swap,三管齐下, trouble shooter. 从一个故事开始 老王的疑问 一个阳光明媚的下…
内存资源紧张时,可能导致的结果 (1)OOM 杀死大内存CPU利用率又低的进程(系统内存耗尽的情况下才生效:OOM 触发的时机是基于虚拟内存,即进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的内存之和,比总的物理内存还大,就会触发 OOM): (2)回收内存 1 )回收文件页(File-backed Page).有两种:   第一种,回收Buffer和Cache.大部分文件页直接回收,以后有需要时,再从磁盘重新读取,脏页先写入磁盘后释放内存.脏页可以通过两种方式写入磁盘:在应用程序中可以…
共享内存 共享内存是进程间通信中最简单的方式之一. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改. 关于共享内存 当一个程序加载进内存后,它就被分成叫作页的块. 通信将存在内存的两个页之间或者两个独立的进程之间. 总之,当一个程序想和另外一个程序通信的时候,那内存将会为这两个程序生成一块公共的…
为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不再是我焦虑. 每一个底层细节的攻克,就越发觉得自己对计算机一无所知,这可能就是对知识的敬畏. 新IO和传统IO-intsmaze 新IO和传统IO都是用于进行输入/输出.  新IO采用了内存映射的方式来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样访问文件了,通过…
转载:http://www.jb51.net/LINUXjishu/152017.html 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 3.命令参数: -b  以Byte为单位显示内存使用情况. -k  以KB为单位显示内存使用情况. -m  以MB为单位显示内存使用情况. -g   以GB为单位显示内存使用情况. -o  不显示缓冲区调节列. -s<间隔秒数>  持续观…
1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述.所有zone都是通过buddy系统管理的,buddy system由Harry Markowitz在1963年提出.buddy的工作方式我就不说了,简单来说buddy就是用来管理内存的使用情况:一个页被申请了,别人就不能申请了.通过/proc/buddyinfo可以查看buddy的内存余量.由于buddy是zone里面的一个成员,所以每个zone都有自…
内存主要用来存储系统和应用程序的指令.数据.缓存等. 内存映射   物理内存也称为主存,动态随机访问内存(DRAM).只有内核才可以直接访问物理内存.   Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的.这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存.虚拟地址空间的内部又被分为内核空间和用户空间两部分.      进程在用户态时,只能访问用户空间内存:只有进入内核态后,才可以访问内核空间内存.虽然每个进程的地址空间都包含了内核空间,但这些内核空间,…
在Linux中,共享内存是允许两个不相关的进程访问同一个逻辑内存的进程间通信方法,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式. 不同进程之间共享的内存通常安排为同一段物理内存.进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址. 就好像它们是由用C语言malloc()分配的内存一样. 建立一个共享内存大概有五个步骤: 1.调用shm_open()函数,在指定一个内存的名字,用来创建或者打开一个共享内存 2.调用mmap()函数,把共享内存映射…
Linux kernel 4.9及以上开启TCP BBR拥塞算法 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bbr 下面简单讲述基于KVM架构VPS如何开启 安装Linux kernel 4.9以上的版本 一般安装最新版本内核 Debian 8+ / Ubuntu 14.04 下载最新内核 # wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.1…
摘要:3.3内存瓶颈OnaLinuxsystem,manyprogramsrunatthesametime.Theseprogramssupportmultipleusers,andsomeprocessesaremoreusedthanothers.Someoftheseprogramsuseaportionofmemorywhiletherestare“sleeping.”Whenanapplicationaccessescache,theperformanceincrease 3.3 内存…