1 查看
less /proc/PID/status
less /proc/PID/statm
pmap PID(进程号)
memusage 命令 (yum install glibc-utils -y)
ipcs (各种内存使用情况)
sar -R 1 20 (-:消耗 +:回收)
sar -W 1 20 (swap)
sar -B 1 20 (I/O)
sar -r 1 20 (内存)
vmstat -n 1 20 (内存)
valgrind --tool=memcheck 命令 (查看命令内存状况)
2 限制内存
vim /etc/security/limits.conf
user1 hard as 1000 (用户user1所有累加起来,内存不超过1000kiB)
user1 soft as 800 (用户user1一次运行,内存不超过800kiB)
普通用户查询自己的限制
ulimit -a
...(-v) 4500
...(-u) 16384
...(-t) unlimited
调节soft限制
ulimit -v 4000
ulimit -u 16000
ulimit -t 10000
3查询TLB
x86info -c
dmesg
getconf -a
4提升TLB命中率
(有大量连续数据) 使用大页hugepages
查询大页的chunk size(默认为4MB)
x86info
dmesg
less /proc/meminfo
调整大页
vim /etc/sysctl.conf
vm.nr_hugepage=20(则TLB空间为20*4MB(chunk size)=80MB)
(针对应用程序)文件系统大页
mkdir /my-hugepages
mount -t hugetlbfs none /my-hugepages (要写入/etc/fstab)
5 跟踪程序使用系统调用及运行资源
yum install strace -y
strace -fc 命令
6最小保留内存空间(如果常有大内存程序,建议调大)
sysctl -a | grep vm.min_free
(默认3831kiB)
7调节内存过量使用
vm.overcommit_memory = 0(有申请时会尽量满足,但会检查内存是否足够)
1(永远满足申请,不检查内存是否够用)
2
vm.overcommit_radio = 50(先用swap与内存的%50)
8查看申请内存量
cat /proc/meminfo | grep committed_AS
9 cache
查看slab cache (存放内核中的对象)
less /proc/slabinfo
slaptop
vmstat -m
查看ARP cache
ip neighbor list
arp -a
cat /proc/net/arp
清空网卡arp :ip neighboor flush dev eth0
调节arp大小:软限制 net.ipv4.neigh.default.gc_thresh2 = 512(条记录)
硬限制 net.ipv4.neigh.default.gc_thresh3 = 1024(条记录)
缓存记录net.ipv4.neigh.default.gc_thresh1 = 128(条记录)
每隔多少秒清空一次 net.ipv4.neigh.default.gc_interval = 30 (秒)
查看page cache
less /proc/meminfo
调节page cache(大量一样的请求 调大page cache)
vm.lowmem_reserve_ratio = 256 256 32 (保留多少内存作为pagecache 当前 最大 最小)
vm.vfs_cache_pressure=100 (大于100,回收pagecache)
vm.page.cluster=3(一次性从swap写入内存的量为2的3次方页)
vm.zone_reclaim_mode=0
1(当内存危机时,是否尽量回收内存 0:尽量回收 1:尽量不回收)
查看anon page(匿名页,用来存放一些其他数据,可用于swap)
less /proc/meminfo
less /proc/PID/statm
10 查看内存空闲值
free -ltm
使用=used-buffer-cached
空闲=free+buffer+cached
11将内存,文件系统,磁盘信息进行同步
ps aux | grep pdflush (查看同步进程pdflush)
vm.nr_pdflush_threads=2(此为pdflush进程数量,不写则默认会根据I/O自动调整)
(当内存较小,调大pdflush数量可更快同步,但由于内存信息被清空,下次访问相同数据会变慢)
12 脏页
vm.dirty_background_radio=10 (当脏页占内存10%,pdflush工作)
vm.dirty_radio=40 (当进程自身脏页占内存40%,进程自己处理脏页,将其写入磁盘)
vm.dirty_expire_centisecs=3000 (脏页老化时间为30秒 3000/100=30秒)
vm.dirty_writeback_centisecs=500 (每隔5秒,pdflush监控一次内存数量 500/100=5秒)
13 sync 将所有缓存,脏页同步到磁盘,一般敲三次
echo 3 > /proc/sys/vm/drop_caches 回收buffers (可用free -m 查看)
14内存溢出自动杀死进程(SELINUX关)
vm.panic_on_oom=0(计算机自动处理)
1(自行配置处理)(子进程会继承父进程此值)
/proc/PID/oom_adj (-19不可被杀死~15可被杀死)
/proc/PID/oom_score (0~2588672)(2的n次方,与上值对应变化,只需改一处)
(pidof vsftpd(查看进程号))
15 swap优化
swap尽量放在多个设备,这样多个I/O可同时运作
vm.swappiness=60 (0优先使用cache~100优先使用swap)
swap大小 内存 swap
1~2G 1.5倍
2~8G 1倍
>8G 0.75倍
vm.swap_token_timeout = 300 (秒)
(多久往swap里写一次)
swapon -s 查看
swapoff -a 关闭
swapon -a 开启