存储+调优:调优二-memory

存储+调优:调优二-memory

调优的目的
1。系统是怎么工作的
2。发现系统的问题,怎么去解决

修改软件(开发人员是否能修改软件)
更换硬件


[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1010        981         29          0        145        649
-/+ buffers/cache:        186        824
Swap:         2047          0       2047


[root@localhost ~]# vmstat 
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  48584 118300 663564    0    0    12    23   60  240  3  2 95  0  0

r R状态进程个数
b I/O阻塞进程个数

[root@localhost ~]# dd if=/dev/zero of=/tmp/file1
[root@localhost ~]# vmstat 1 100

bi block读磁盘
bo block写磁盘

执行find /
bi高 bo(atime)

swapd已用swap

读写操作 buffer cache会改变
si:swap换入
so:swap换出

cs:进程上下文切换
cpu执行进程加载进程的数据,执行下一个进程切换下一个进程上下文,进程切换比较频繁

id:30%正常


memory:
内存中存的是什么?
程序需要的环境变量
程序需要的库文件
程序本身
程序临时产生数据需要动态调整内存
程序需要打开的文件
kernel常驻内存

消耗内存最多的是进程
|-------------|
|进程间通信     | 管道符,前一个命令的输出存在那里?
|-------------|
|buffer/cache |
|-------------|
|进程          |
|-------------|
|kernel       |
|-------------|

内存使用是否有异常情况发生

[root@localhost ~]# yum install memtest86+

ECC内存,即应用了能够实现错误检查和纠正技术(ECC)的内存条。一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。ECC是“Error Checking and Correcting”的简写,中文名称是“错误检查和纠正”。

[root@localhost ~]# memtest-setup 
Setup complete.

[root@localhost ~]# hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   3896 MB in  2.00 seconds = 1949.43 MB/sec
 Timing buffered disk reads:   38 MB in  3.09 seconds =  12.31 MB/sec

内存大小限制
32位操作系统 4G
kernel-PAE 4G X 2*4 = 64G

free -m

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1010        961         49          0        155        618
-/+ buffers/cache:        188        822
Swap:         2047          0       2047


buffer/cache

文件的内容 data block  1K 4K
文件的属性 inode block 128Byte

find命令可以看到buffer增长

把缓存中的数据,同不到磁盘上
在缓存中的数据称为脏数据
[root@localhost ~]# cat /proc/sys/vm/dirty_
dirty_background_ratio     dirty_ratio
dirty_expire_centisecs     dirty_writeback_centisecs

[root@localhost ~]# cat /proc/sys/vm/dirty_writeback_centisecs 
499
百分之一秒,5秒写一次
vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  39264 167824 633128    0    0     7    17   56  221  2  2 96  0  0
观察bo


如果单个进程占用的buffer/cache达到内存总量的40%,立刻同步。
[root@localhost ~]# cat /proc/sys/vm/dirty_ratio 
40

所有进程占用的buffer/cache使得剩余内存低于内存总量的10%,立刻同步
[root@localhost ~]# cat /proc/sys/vm/dirty_background_ratio 
10

30秒之内数据必须被同步
[root@localhost ~]# cat /proc/sys/vm/dirty_expire_centisecs 
2999

kernel级别进程pdflush用来同步脏数据
[root@localhost ~]# ps aux | grep pdflush
root       248  0.0  0.0      0     0 ?        S    Apr02   0:00 [pdflush]
root       249  0.0  0.0      0     0 ?        S    Apr02   0:25 [pdflush]
root     12525  0.0  0.0   3920   688 pts/2    R+   11:03   0:00 grep pdflush

[root@localhost ~]# cat /proc/sys/vm/nr_pdflush_threads 
2

手工同步脏数据(卸载U盘)
[root@localhost ~]# sync 

内存不够用,会发生什么情况
[root@localhost ~]# ulimit -v 0
[root@localhost ~]# ls
Killed

[root@localhost ~]# cat /proc/meminfo | grep -i active
Active:         575380 kB    内存中经常访问的
Inactive:       362592 kB    内存中不经常访问的

内存不够用的时候可以使用交换分区
交换分区的喜好程度
[root@localhost ~]# cat /proc/sys/vm/swappiness
60
linux在内存还剩余一点的时候,使用交换分区,喜好程度的值越大,越会考虑用swap
在内存不够用的时候,会交换Inactive
非活跃的数据比较多的时候,才会考虑增大交换分区


内存不够用的时候,make编译,增加交换分区也不能解决问题

内存不都用可以考虑释放buffer/cache
[root@localhost ~]# cat /proc/sys/vm/drop_caches 
0
1 释放cache
2 释放buffer
3 buffer/cache都释放

===============================================
[root@localhost ~]# man 5 proc    少部分内核参数

[root@localhost ~]# yum install kernel-doc
[root@localhost ~]# grep -r "drop_cache" /usr/share/doc/kernel-doc-2.6.18/[root@localhost ~]# less /usr/share/doc/kernel-doc-2.6.18/Documentation/filesystems/proc.txt 
===============================================

把外存当内存来用mkswap

并行swap
swapon -p 5 /dev/sda5
swapon -p 5 /dev/sda6

/etc/fstab
/dev/sda5   swap   swap    defaults,pri=5   0 0


把内存当磁盘来用(确保磁盘不会断电)对容量空间没有要求,对I/O要求比较高

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              37G  3.1G   32G   9% /
/dev/sda1              99M   12M   83M  13% /boot
tmpfs                 506M     0  506M   0% /dev/shm (共享内存)
/dev/hdc              2.9G  2.9G     0 100% /media/RHEL_5.5 i386 DVD


[root@localhost ~]# mount -t tmpfs -o size=100M tmpfs /mnt/
[root@localhost ~]# mount | grep tmp
tmpfs on /dev/shm type tmpfs (rw)
tmpfs on /mnt type tmpfs (rw,size=100M)
[root@localhost ~]# dd if=/dev/zero of=/mnt/file50M bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 8.46085 seconds, 6.2 MB/s
[root@localhost ~]# dd if=/dev/zero of=/tmp/file50M bs=1M count=50 oflag=direct
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 31.2616 seconds, 1.7 MB/s

kernel拿tmpfs给进程用
[root@localhost ~]# grep tmpfs /etc/fstab 
tmpfs                   /dev/shm                tmpfs   defaults        0 0


内存不够用的时候,会发生什么情况
关闭交换分区,挂载一个超过内存大小的tmpfs,dd内容直到内存耗尽。


内存调优
谁在用内存
进程间通信
buffer/cache
进程
kernel


进程间通信
Unix  pipe 本地进程间通信
      socket 本地/网络进程间通信,主要是网络
SysV  消息队列
      信号量
      共享内存段

[root@localhost ~]# ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x740380cb 3080192    root      600        4          0                       
0x00000000 3473409    root      600        393216     2          dest         
0x740380ca 3047426    root      600        4          0                       
0x00000000 3506179    root      600        393216     2          dest         
0x00000000 3538948    root      600        393216     2          dest         
0x00000000 3571717    root      600        393216     2          dest         
0x00000000 3604486    root      600        393216     2          dest         
0x00000000 3637255    root      600        393216     2          dest         
0x00000000 3670024    root      600        393216     2          dest         
0x00000000 4161545    root      600        393216     2          dest         
0x00000000 3735562    root      600        393216     2          dest         
0x00000000 3768331    root      600        393216     2          dest         
0x00000000 3801100    root      600        393216     2          dest         
0x00000000 4194317    root      600        393216     2          dest         
0x00000000 4259854    root      600        393216     2          dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages 


管道不能传输太多的内容,可能发生 pipe broken

pipe < 消息队列 < 共享内存段

信号量数组中可以存放文件的锁标记,有开发人员决定用不用或存什么,没有命令能够看到

[root@localhost ~]# ll /dev/initctl
prw------- 1 root root 0 Mar 30 11:41 /dev/initctl

[root@localhost ~]# ls /proc/sys/kernel/shm*
/proc/sys/kernel/shmall  /proc/sys/kernel/shmmax  /proc/sys/kernel/shmmni
[root@localhost ~]# ls /proc/sys/kernel/msg*
/proc/sys/kernel/msgmax  /proc/sys/kernel/msgmnb  /proc/sys/kernel/msgmni
[root@localhost ~]# ls /proc/sys/kernel/sem*
/proc/sys/kernel/sem

[root@localhost ~]# sar -r 1 1
Linux 2.6.18-194.el5 (localhost.localdomain)    04/04/2012

01:01:42 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
01:01:43 PM    591720    443388     42.83     11100    243604   2096472         0      0.00         0
Average:       591720    443388     42.83     11100    243604   2096472         0      0.00         0


===========================================
1、做实验,耗尽内存
  如:做一个内存磁盘,往其中dd写大文件,直到内存被占尽。然后出现 kill进程的情况
2、做一个内存磁盘,让apache使用
3、创建一个交换分区
4、linux下进程间通讯的方式有几种? 分别是?
5、解释vmstat命令的输出结果的段含义(man)
===========================================

free命令
1。使用free命令查看内存状态,记录当前内存总量,内存剩余量。

2。执行以下命令,并在执行之后查看当前内存总量,内存剩余量
   dd if=/dev/zere of=file bs=1M count=200

3.内存剩余是否有变化?

4。对比命令执行前后的-/+buffer/cache的数据显示,变化是否很大?

5。执行一下命令,并在执行之后查看当前内存状态,对比之前的状态。
  echo 1 > /proc/sys/vm/drop_caches

6.通过查询帮助理解/proc/sys/vm/drop_caches文件的作用。

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔-的-女汉子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值