Linux的基本原则是没有资源应该被浪费.因此核心会使用尽可能多的RAM,来缓存来自本地和远程的文件系统的信息.系统做读写操作的时候,会将与当前运行的进程相关的数据尽量存储在RAM里.系统报告的缓存是缓冲和页缓存两者之和.缓存并不是在进程结束的时候被回收(你可能很快会启动另外一个进程,需要同样的数据),而是随需回收–比如,当你启动一个需要大量内存的进程时,Linux核心会从内存中回收缓存,将得到的内存分配给新的进程,可能原因是内存占满导致具体解决方案如下步骤:
1、查看内存剩余量
[root@iZ256w2hluuZ ~]# free -m total used free shared buffers cached Mem: 994345649 0 5 34 -/+ buffers/cache:305689 Swap: 0 0 0
物理已用内存 = 实际已用内存 - 缓冲 - 缓存,具体算法如下:
306M = 345M - 5M - 34M
物理空闲内存 = 总物理内存 - 实际已用内存 + 缓冲 + 缓存
应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存
2.修改mysql配置文件,具体命令如下:
[root@iZ256w2hluuZ ~]# vi /etc/my.cnf 输入/ 查找 max_connections,如果没有在mysqld下手动添加 max_connections = 50 #50最大连接数因服务器而定 # The MySQL server [mysqld] 在这个下面添加max_connections = 50,:wq保存并退出,重启mysql服务,具体命令如下: [root@iZ256w2hluuZ ~]# service mysqld restart
4.在查看剩余内存量,具体命令如下:
[root@iZ256w2hluuZ ~]# free -m
如果free值还是没有改变的话,继续操作下面的操作
5、清理下Mysql缓存,具体命令如下:
[root@iZ256w2hluuZ ~]# vi /etc/proc/sys/vm/drop_caches
把0改为3,:wq保存并退出
[root@iZ256w2hluuZ ~]# cd /etc/proc/sys/vm/ [root@iZ256w2hluuZ ~]# echo 3 > drop_caches
6、在重启mysql服务器,具体命令如下:
[root@iZ256w2hluuZ ~]# service mysqld restart
查看下剩余内存,此时应该已经改变如果还是没有改变可能是因为其他原因了。