计算机体系结构 -内存优化

/proc/slabinfo/proc/buddyinfo/proc/zoneinfo/proc/meminfo

[[email protected] /]# slabtop

 Active / Total Objects (% used)    : 347039 / 361203 (96.1%) Active / Total Slabs (% used)      : 24490 / 24490 (100.0%) Active / Total Caches (% used)     : 88 / 170 (51.8%) Active / Total Size (% used)       : 98059.38K / 99927.38K (98.1%) Minimum / Average / Maximum Object : 0.02K / 0.28K / 4096.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   115625 115344  99%    0.10K   3125       37     12500K buffer_head 73880  73437  99%    0.19K   3694       20     14776K dentry 42184  42180  99%    0.99K  10546        4     42184K ext4_inode_cache 20827  20384  97%    0.06K    353       59      1412K size-64 16709  13418  80%    0.05K    217       77       868K anon_vma_chain 15792  15708  99%    0.03K    141      112       564K size-32 11267  10323  91%    0.20K    593       19      2372K vm_area_struct 10806  10689  98%    0.64K   1801        6      7204K proc_inode_cache  9384   5232  55%    0.04K    102       92       408K anon_vma  7155   7146  99%    0.07K    135       53       540K selinux_inode_security  7070   7070 100%    0.55K   1010        7      4040K radix_tree_node  6444   6443  99%    0.58K   1074        6      4296K inode_cache  5778   5773  99%    0.14K    214       27       856K sysfs_dir_cache  3816   3765  98%    0.07K     72       53       288K Acpi-Operand  2208   2199  99%    0.04K     24       92        96K Acpi-Namespace  1860   1830  98%    0.12K     62       30       248K size-128  1440   1177  81%    0.19K     72       20       288K size-192  1220    699  57%    0.19K     61       20       244K filp   660    599  90%    1.00K    165        4       660K size-1024

[[email protected] xx]# cat /proc/meminfo |grep HugePage
AnonHugePages:      2048 kB
HugePages_Total:         0
HugePages_Free:          0
HugePages_Rsvd:          0
HugePages_Surp:          0

1.vi /etc/sysctl.conf  加入  vm.nr_hugepages = 10

2.sysctl -p[[email protected] /]#  cat /proc/meminfo |grep HugeAnonHugePages:      2048 kBHugePages_Total:      10HugePages_Free:       10HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kB

3.应用于应用程序[[email protected] /]# mkdir /hugepages[[email protected] /]# mount -t  hugetlbfs  none  /hugepages

[[email protected] /]# dd if=/dev/zero of=/hugepages/a.out bs=1M count=5
Hugetable page:

Hugetlbfs support is built on top of multiple page size support that is provided by most modern architectures
Users can use the huge page support in Linux kernel by either using the mmap system call or standard Sysv shared memory system calls (shmget, shmat)
cat /proc/meminfo | grep HugePage
Improving TLB performance:

Kernel must usually flush TLB entries upon a context switch
Use free, contiguous physical pages
    Automatically via the buddy allocator
    /proc/buddyinfo
Manually via hugepages (not pageable)
    Linux supports large sized pages through the hugepages mechanism
    Sometimes known as bigpages, largepages or the hugetlbfs filesystem
Consequences
    TLB cache hit more likely
    Reduces PTE visit count
Tuning TLB performance

Check size of hugepages
     x86info -a | grep “Data TLB”
     dmesg
     cat /proc/meminfo
Enable hugepages
    1.In /etc/sysctl.conf
       vm.nr_hugepages = n
    2.Kernel parameter     //操作系动起动时传参数
        hugepages=n
Configure hugetlbfs if needed by application
     mmap system call requires that hugetlbfs is mounted
     mkdir  /hugepages
     mount -t  hugetlbfs  none  /hugepages
     shmat and shmget system calls do not require hugetlbfs
Trace every system call made by a program
strace  -o  /tmp/strace.out  -p  PID
grep  mmap  /tmp/strace.out

Summarize system calls
strace  -c  -p PID   or
strace  -c  COMMANDstrace command
Other uses
Investigate lock contentions
Identify problems caused by improper file permissions
Pinpoint IO problems
Strategies for using memory使用内存优化

1.Reduce overhead for tiny memory objects
  Slab cache  cat /proc/slabinfo
2.Reduce or defer service time for slower subsystems
    Filesystem metadata: buffer cache (slab cache)   //缓存文件元数据
    Disk IO: page cache                              //缓存数据
    Interprocess communications: shared memory       //共享内存
    Network IO: buffer cache, arp cache, connection tracking
3.Considerations when tuning memory
    How should pages be reclaimed to avoid pressure?
    Larger writes are usually more efficient due to re-sorting
内存参数设置:vm.min_free_kbytes:1.因为内存耗近,系统会崩溃2.因此保有空闲内存剩下,当进程请求内存分配,不足会把其他内存交换到SWAP中,从而便腾去足够空间去给请求  Tuning vm.min_free_kbytes only be necessary when an application regularly needs to allocate a large block of memory, then frees that same memory
  使用情况:   It may well be the case that     the system has too little disk bandwidth,     too little CPU power, or    too little memory to handle its load

    Linux 提供了这样一个参数min_free_kbytes,用来确定系统开始回收内存的阀值,控制系统的空闲内存。值越高,内核越早开始回收内存,空闲内存越高。    http://www.cnblogs.com/itfriend/archive/2011/12/14/2287160.html
Consequences
  Reduces service time for demand paging
  Memory is not available for other useage
  Can cause pressure on ZONE_NORMAL
Linux服务器内存使用量超过阈值,触发报警。

问题排查

首先,通过free命令观察系统的内存使用情况,显示如下:

total       used       free     shared    buffers     cached
Mem:      24675796   24587144      88652          0     357012    1612488
-/+ buffers/cache:   22617644    2058152
Swap:      2096472     108224    1988248
其中,可以看出内存总量为24675796KB,已使用22617644KB,只剩余2058152KB。

然后,接着通过top命令,shift + M按内存排序后,观察系统中使用内存最大的进程情况,发现只占用了18GB内存,其他进程均很小,可忽略。

因此,还有将近4GB内存(22617644KB-18GB,约4GB)用到什么地方了呢?

进一步,通过cat /proc/meminfo发现,其中有将近4GB(3688732 KB)的Slab内存:

......
Mapped:          25212 kB
Slab:          3688732 kB
PageTables:      43524 kB
......
Slab是用于存放内核数据结构缓存,再通过slabtop命令查看这部分内存的使用情况:

OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
13926348 13926348 100%    0.21K 773686       18   3494744K dentry_cache
334040 262056  78%    0.09K   8351       40     33404K buffer_head
151040 150537  99%    0.74K  30208        5    120832K ext3_inode_cache
发现其中大部分(大约3.5GB)都是用于了dentry_cache。

问题解决

1. 修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档):

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are not freeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.
2. 方法1需要用户具有root权限,如果不是root,但有sudo权限,可以通过sysctl命令进行设置:

$sync
$sudo sysctl -w vm.drop_caches=3
$sudo sysctl -w vm.drop_caches=0 #recovery drop_caches
操作后可以通过sudo sysctl -a | grep drop_caches查看是否生效。
时间: 2024-10-26 17:45:24

计算机体系结构 -内存优化的相关文章

(七)计算机体系结构/内存层次

计算机体系结构/内存层次 内容摘要 计算机体系结构/内存层次 计算机体系结构 内存层次 操作系统的内存管理方式 地址空间 & 地址生成 连续内存分配 伙伴系统 内存层次 CPU中有两级缓存 L1缓存,L2缓存(高速缓存未命中) , 这部分由硬件在做 内存,使用操作系统控制(如果没有,可能是存到外存里,虚拟内存) 操作系统的内存管理 内存(以字节为单位访问,每个字节有自己的一个地址-物理地址) 外存(磁盘),有扇区编号(每个扇区512字节最小单位) 期望:有若干个进程,每个进程都有共同的一部分的地

探讨深入Java虚拟机之内存优化

上一篇我们讲述了Java虚拟机的体系结构和内存模型,那么我们就不得不说到内存泄露.大家都知道,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾回收机制来回收内存,在大多数的情况下并不需要java程序开发人员操太多的心,但也是存在泄露问题的,只是比C++小一点.比如说,程序中存在被引用但无用的对象:程序引用了该对象,但后续不会或者不能再使用它,那么它占用的内存空间就浪费了. 我们先来看看GC是如何工作的:监控每一个对象的运

Android 性能优化之内存泄漏检测以及内存优化(上)

在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完成的,Java/Android 程序员不用像 C/C++ 程序员一样手动调用相关函数来管理内存的分配和释放,虽然方便了很多,但是这也就造成了内存泄漏的可能性,所以记录一下针对 Android 应用的内存泄漏的检测,处理和优化的相关内容,上篇主要会分析 Java/Android 的内存分配以及 GC 的详细分析,中篇会阐述 Android 内存泄漏的检测和内存泄漏的常见产生情景,下篇会

计算机体系结构总结

计算机体系结构 计算机体系结构是机器级程序员所看到的计算机的属性,即概念性结构与功能特性. 经典计算机体系结构概念的实质是计算机系统中软硬件界面的确定,其界面之上的是软件的功能,界面之下的是硬件和固件的功能. 广义(现代)的计算机体系结的构概念,它除了包括经典的计算机体系结构的概念范畴(指令集结构),还包括计算机组成和计算机实现的内容. 目录 计算机体系结构的功能属性 计算机体系结构的分类 计算机体系结构基本原理 计算机体系结构研究面临的挑战 计算机体系结构的功能属性 ●数据表示(硬件能直接辩认

服务器优化案列分析之SQL server内存优化

状况分析 环境如下: 硬件:IBM3610服务器 系统:windows2003  x32 应用:内部物流系统软件   C/S架构 数据库:SQL Server2000 问题: 因为物流系统架构问题(开发比较早05年开发架构)服务端和客户端都只能运行在32位环境下 这样导致系统内存用不上去,一直在3.25G左右 SQL的运行内存一旦上去退步下来 用户连接量大的时候很卡,并发上不去 最后搜罗了很多方法,进行32位环境下的内存优化,具体如下: 1.Windows 2003 企业版 打开PAE更好的利用

存储相关的基于Intel体系的计算机体系结构演进

存储相关的基于Intel体系的计算机体系结构演进2 磁盘是怎么记录0和1以及感知的,磁头结构3 HMR PMR HAMR SMRTDMR,以及磁头定位纠偏原理4 磁盘寻道演示及其他5 混合硬盘.冲氦硬盘.磁盘节能相关6 IP硬盘7 内核IO路径.SCSI协议体系结构8 主流Raid类型原理,Raid卡架构,Raid卡电容+Flash保护方案9 NAND Flash组成和读写原理及性能10 主流Flash产品介绍11 Flash控制器内部架构分析12 NVMe及SFF8639接口13 NVRAM.

016_计算机体系结构一

 CPU:是有运算器,控制器,存储器组成:CPU中的值得是寄存器而不是主板上的内存 计算计的存储器是内存,CPU的存储器是寄存器RAM 冯诺依曼结构与哈佛结构的区别:哈弗结构在内存中增加了逻辑分段 CS(IP):代码段 DS(bx):数据段 SS(sp):栈段 bss:未初始化的数据段 readelf -a a.out :查看链接生成的.out文件 链接器:将所有的.o文件中相同段的数据通过链接到对应段的集合中 加载器:将链接后生成的.out文件加载到内存中 查看程序内核信息:cd /pro

2017版:KVM 性能优化之内存优化

我们说完CPU方面的优化,接着我们继续第二块内容,也就是内存方面的优化.内存方面有以下四个方向去着手: EPT 技术 大页和透明大页 KSM 技术 内存限制 1. EPT技术 EPT也就是扩展页表,这是intel开创的硬件辅助内存虚拟化技术.我们知道内存的使用,是一个逻辑地址跟物理地址转换的过程.虚拟机内部有逻辑地址转成成物理地址的过程,然后再跳出来,虚拟机这块内存又跟宿主机存在逻辑到物理的转换.有了EPT技术,那么能够将虚拟机的物理地址直接翻译为宿主机的物理地址,从而把后面那个转换过程去掉了,

试试SQLSERVER2014的内存优化表

原文:试试SQLSERVER2014的内存优化表 试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载. 就算如此,要利用此新功能,数据库必须包含"内存优化"文件组和表 即所配置的文件组和表使用Hekaton技术. 幸运的是,SQL Server 2014使这一过程变得非常简单直接. 要说明其工作原理,我们来创