内存瓶颈

  • 内存瓶颈
    • 找到内存瓶颈
    • 性能调优选项
      Linux系统上,有很多进程在同时运行。这些程序支持多用户,有些进程比另外的用的更多一些。当一个应用访问缓存的时候,会保持较高的性能,因为它从内存中取数据,而不是速度很慢的磁盘中。

操作系统使用算法来控制哪些程序使用物理内存,而哪些程序要page out。这对用户程序是透明的。Page空间是由操作系统在当前没有使用的磁盘上,创建的用来存放用户程序的一个文件。通常,page size是4KB或者8KB。在Linux上,在include/asm-/param.h内核头文件中,EXEC_PAGESIZE变量定义了Page size的大小。把程序page out到磁盘的过程叫做pageout。

找到内存瓶颈

从列出在服务器上运行的应用开始分析。看看每个程序用了多少物理内存和swap空间。下图展示KDE System Guard监控内存的使用情况。kde-system-guard-memory-monitoring下面的表格也可你帮你定义内存的问题:| 内存指示器 | 分析 | | —- | —- | | 可用内存(Memory available) | 表示还有多少内存可以使用。如果在开启你的应用之后,这个值明显降低了,可能是因为内存泄露。检查应用,做出适当的调整。使用free -l -t -o来查看额外信息 | | 页错误(Page faults) | 有两类页错误:软页错误,在内存中发现页;硬页错误,在内存中没有发现页,而必须从磁盘中获取。访问磁盘会显著的使应用变慢。sar -B命令可以提供观察页错误的信息。,尤其是pgpgin/s和pgpgout/s两列。 | | 文件系统缓存(File system cache) | 被文件系统缓存使用的内存空间。使用free -l -t -o命令查看信息。 | | 进程独占缓存(Private memory for rocess) | 服务器上各个进程使用的内存。可以使用pmap命令查看给特定的进程分配了多少内存 | 页和交换指示器和所有基于UNIX的系统一样,在Linux中,分页(paging)和交换(swapping)是有区别的,分页是把独立的页移动到磁盘上的交换分区;交换是一个大型操作,把进程所有的地址空间一次全部移动到交换分区。交换可能是由两种因素引起的:+ 进程进入睡眠模式。这种事情经常发生,因为进程依赖于交互操作、编辑器、shell等等,应用程序把大多数时间花在等待用户输入数据上。在此期间,进程是非激活的。+ 进程行为异常。分页可能是严重的性能问题,当空闲内存量小于预设的值时,因为分页机制不能处理对物理内存页的请求,于是调用swap机制释放更多的页,把内存数据放入到swap中。这会导致增加I/O,并且明显的性能降低。如果服务器总是分页到磁盘(page-out很高)上,应该考虑增加更多的内存。然而,如果系统的page-out很低,可能是性能利用不充分。

性能调优选项

如果确定是内存瓶颈,可以执行下面的操作:

  • 使用bigpages、hugetlb和共享内存调优swap空间。

  • 增加或者减少页大小。

  • 改善活动和非活动的内存处理

  • 调整page-out率

  • 限制服务器上每个用户可使用的资源

  • 关掉用不到的服务

  • 增加内存

原文: https://lihz1990.gitbooks.io/transoflptg/content/03.分析性能瓶颈/3.3.内存瓶颈.html