目录
一、问题
二、解决思路
(一)问题分析
(二)思路
1. 清理缓存
2. 结束不必要的进程
3. 优化应用程序和服务
4. 增加物理内存
5、注意事项
三、实际处理
(一)结束不必要的程序
(二)清理缓存的方法
1、清理页面缓存
2、使用sync命令:
3、重启服务或系统:
4、调整内核参数:
(三)实际操作
1、操作方法
2、实际命令效果
一、问题
我们发现在视频监控平台在web客户端查看视频的时候,超过16路视频同时进行播放的话,就会出现画面卡顿、无故停止的情况,有时候也发现链路断开的情况。
经过研发的跟踪、调试,发现是内存消耗太大导致的。我们的系统内存大概32Gb,经过好像基本上都被像消耗完了,空闲内存只有480M左右。
因此,研发要求增加系统内存,主要是空闲内存要足够大。
但是系统的32G内存,其实我们的程序占用并不多,总计算下来也就3GB左右,那么多内存跑到哪里去了?
二、解决思路
(一)问题分析
根据问题,我们第一想的不是增加物理内存,我们的系统还是比较精炼的,一般最简单的系统只需要2G内存,就可以正常使用。
我们又看了内存的占用情况,采用如下命令
free -m
结果如下图:
因此,我们把思路定在如何进行内存的转化的方法上来,就是把可用内存转化为空闲内存
(二)思路
在Linux系统中,将可用内存转化为空闲内存并不是一个直接的操作,因为内存的管理是由操作系统内核自动进行的。可用内存是指系统可以立即分配给进程使用的内存量,而空闲内存则是没有被任何进程或系统组件使用的内存。
但是,我们可以采取一些措施来释放被缓存或缓冲占用的内存,从而间接地增加空闲内存的量。但这样做可能会影响系统性能,因为缓存和缓冲有助于提高数据访问速度。
以下是一些方法:
1. 清理缓存
清理缓存通常指的是释放被系统用作缓存的内存。这些缓存通常包括文件系统的页面缓存、目录项缓存(dentries)和inode缓存。尽管缓存有助于提高系统性能,但在某些情况下,可以释放这些缓存以获取更多的“空闲”内存。
清理缓存通常并不是必要的,因为Linux内核会自动管理缓存,并根据需要释放它们。但在某些性能测试、故障排查或资源监控的场景中,清理缓存可能有助于获取更一致的测试结果或观察系统行为。
2. 结束不必要的进程
使用`top`或`htop`命令查看当前运行的进程,并结束那些占用大量内存但不必要的进程。这可以释放被这些进程占用的内存。
3. 优化应用程序和服务
检查你的应用程序或服务是否有内存泄漏或其他内存使用不当的问题,并进行优化。这有助于减少内存的使用量,从而间接增加空闲内存。
4. 增加物理内存
如果经常遇到内存不足的情况,考虑增加服务器的物理内存。这是解决内存问题的根本方法。
5、注意事项
Linux系统通常会自动管理内存的使用,以最大化性能和效率。因此,在尝试释放内存之前,最好先了解系统当前的内存使用情况和性能瓶颈,避免不必要的操作。同时,清理缓存或结束进程等操作可能会影响系统的稳定性和性能,所以在进行这些操作时要谨慎,并确保你了解它们的后果。
空闲内存并不总是越多越好。操作系统会尽量利用所有可用内存来提高性能,因此一定程度的缓存和缓冲是正常的,也是有益的。只有在确实遇到内存不足的问题时,才需要考虑采取上述措施来释放内存,本例就是实际使用发现内存不足的无奈之举。
三、实际处理
(一)结束不必要的程序
此步骤比较简单,就不再累述。
(二)清理缓存的方法
以下是几种清理Linux缓存的方法:
1、清理页面缓存
通过写入/proc/sys/vm/drop_caches文件来清理页面缓存。这个文件接受几个不同的值:
echo 1 > /proc/sys/vm/drop_caches:清理页面缓存。
echo 2 > /proc/sys/vm/drop_caches:清理目录项和inode缓存。
echo 3 > /proc/sys/vm/drop_caches:清理页面缓存、目录项和inode缓存。
请注意,这些操作需要root权限。
2、使用sync命令
在清理缓存之前,最好先运行sync命令,以确保所有挂起的文件系统写入操作都已完成并写入磁盘。这有助于避免数据丢失或损坏。
3、重启服务或系统
虽然这不是一个常规的缓存清理方法,但重启服务或整个系统通常会释放所有缓存。然而,这种方法通常只在需要立即释放所有资源时才使用,并且会对正在运行的服务造成中断。
4、调整内核参数
在某些情况下,我们希望调整内核参数来影响缓存的行为。例如,可以调整vm.swappiness参数来控制系统使用交换空间的倾向性。但这些更改可能会影响系统性能和稳定性,因此应该谨慎进行。
(三)实际操作
1、操作方法
经过讨论,决定使用`sync`命令将文件系统的缓冲区数据写入磁盘,然后使用`echo`命令配合`free`命令来清理页面缓存。命令如下:
sync; echo 1 > /proc/sys/vm/drop_caches
这里的`drop_caches`可以设置为1(清理页面缓存)、2(清理目录项和inode缓存)、3(清理页面缓存、目录项和inode缓存)。
2、实际命令效果
如下为实际操作效果:
root@gxdxroot-KVM:~# free -mtotal used free shared buff/cache available
Mem: 32087 4138 589 28 27359 27455
Swap: 2047 163 1884
root@gxdxroot-KVM:~#
root@gxdxroot-KVM:~#
root@gxdxroot-KVM:~#
root@gxdxroot-KVM:~#
root@gxdxroot-KVM:~# sync; echo 1 > /proc/sys/vm/drop_cachesroot@gxdxroot-KVM:~# free -mtotal used free shared buff/cache available
Mem: 32087 4093 27089 28 904 27500
Swap: 2047 163 1884
root@gxdxroot-KVM:~#
由此可以看出,内存转化效果非常明显,增加了26.5G的空闲内存。
问题得到完美解决!
若想了解更多,文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。