undefined

一、系统内存资源回收方式

1. 系统的内存资源紧张时,系统可能会进行 内存回收、OOM杀死进程

  • OOM(Out Of Memory)系统杀死占用大量内存的进程,释放这些内存,再分配给其他更需要的进程
  • 内存回收:系统释放掉可以回收的内存。
    • 比如缓存和缓冲区属于可回收内存。他们在内存管理中,通常被叫做文件页。大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读取就可以了。而那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),就得先写入磁盘,然后才能进行内存释放。
    • 比如内存映射的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次再访问的时候,从文件重新读取
查看更多

undefined

内存泄露的排查与定位

  • 栈内存由系统自动分配和管理。一旦程序运行超出了这个局部变量的作用域,栈内存就会被系统自动回收,所以不会产生内存泄露的问题
  • 堆内存由应用程序自己来分配和管理。除非程序退出,这些堆内存并不会被系统自动释放,而是需要应用程序明确调用库函数 free 来释放他们。如果程序没有正确释放堆内存,就会造成内存泄露
  • 只读段,包括程序的代码和常量,由于是只读的,不会再去分配新的内存,所以也不会产生内存泄漏
  • 数据段,包括全局变量和静态变量,这些变量在定义时就已经确定了大小,所以也不会产生内存泄漏
查看更多

undefined

一、内存映射

Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。虚拟地址空间又被分为内核空间用户空间。不同位的处理器,虚拟地址空间布局不一样,如下是 32 位和64 位虚拟地址空间

进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。虽然每个进程的地址空间都包含了内核空间,但这些内核空间都关联相同的物理内存。

并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才会分配物理内存,并且分配后的物理内存,是通过内存映射来管理的

查看更多

undefined

如何快速定位系统内存问题

一、内存性能指标

1. 系统内存使用情况

  • 已用内存和剩余内存,就是已经使用和还未使用的内存。
  • 共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊的缓存。
  • 可用内存是新进程可以使用的最大内存,它包括剩余内存和可回收缓存。
  • 缓存包括两部分,一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快以后再次访问的速度。另一部分,则是 Slab 分配器中的可回收内存
查看更多

undefined

一、C10K问题

C10K 和 C1000K 的首字母 C 是 Client 的缩写。C10K 就是单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 就是单机支持处理 100 万个请求(并发连接 100 万)的问题

对于 C10K 问题,从资源上来说,对 2GB 内存和千兆网卡的服务器来说,同时处理 1w 个请求,只要每个请求处理占用不到 200KB(2GB/1w)的内存和 100Kbit(1000Mbit/1w)的网络带宽就可以。因此物理资源是足够的,接下来就是软件问题,特别是网络的 IO 模型

如何解决:

IO 模型优化

查看更多

undefined

缓存命中率

这里的缓存指的是数据在内存中的临时存储

缓存命中率:指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好

一、工具介绍

1. cachestat 和 cachetop

  • cachestat:提供了整个操作系统缓存的读写命中情况
  • cachetop:提供了每个进程的缓存命中情况
查看更多

undefined

DDoS 攻击

DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求,来占用过多的目标资源,从而使目标服务无法响应正常请求。

DDoS(Distributed Denial of Service) 则是在 DoS 的基础上,采用了分布式架构,利用多台主机同时攻击目标主机。这样,即使目标服务部署了网络防御设备,面对大量网络请求时,还是无力应对。

从攻击的原理来看,DDos 攻击可以分为下面几种类型:

  • 耗尽带宽。无论是服务器还是路由器、交换机等网络设备,带宽都有固定的上限。带宽耗尽后,就会发生网络拥堵,从而无法传输其他正常的网络报文
查看更多