您的位置:首页 > 运维架构 > Linux

linux 内存调优

2016-07-08 16:21 344 查看
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 
内存调优 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 | grepvm.min_free 
(默认3831kiB) 
7 调节内存过量使用 
vm.overcommit_memory = 0(有申请时会尽量满足,但会检查内存是否足够) 
1(永远满足申请,不检查内存是否够用) 2 
vm.overcommit_radio = 50(先用swap与内存的%50) 
8 查看申请内存量 
cat /proc/meminfo | grepcommitted_AS 
9 cache 
查看slab cache (存放内核中的对象)
less /proc/slabinfo 
slaptop 
vmstat -m 
查看ARP cache 
ip neighbor list 
arp -a 
cat /proc/net/arp 
清空网卡arp :ipneighboor 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 | greppdflush (查看同步进程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次方,与上值对应变化,只需改一处) 
(pidofvsftpd(查看进程号)) 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 开启
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: