AI 日报

何为内存泄漏?如何监测并防止内存泄漏事故发生

  • By 51ITO
  • Dec 19, 2023 - 2 min read



本文关键要点:

1)当应用程序无法返回分配的内存时,就会发生内存泄漏,逐渐消耗更多内存并可能导致系统崩溃。

2)用户可以通过监控系统的 RAM 使用情况来识别任何稳定消耗更多内存的应用程序,或通过进程来检测内存泄漏。

3)修复和防止内存泄漏的方法之一是使操作系统以及用户使用的应用程序保持最新状态。

无论您的计算机速度有多快、多新,内存泄漏等问题仍然会影响体验。但究竟什么是内存泄漏,它是如何发生的?

什么是内存泄漏?

计算机内存称为随机存取存储器 (RAM),它临时存储与计算机上运行的操作系统、程序和服务相关的信息。之所以使用 RAM,是因为它速度够快(比 SSD 还快),能够通过存储临时数据来提高计算机的性能。

应用程序根据需要使用内存,存储与操作经常请求的数据等相关的信息。当应用程序停止使用分配的内存时,它表示内存现在是空闲的。但是,如果应用程序继续运行而不返回分配的内存,它将逐渐消耗越来越多的可用内存,最终导致系统崩溃。

如何检测内存泄漏

当系统出现内存不足时,用户大都会收到一条警告消息,提示“您的计算机内存不足”。在所有主要操作系统中,我们都能收到类似的消息,一旦看到它,可能会导致计算机性能下降,系统开始出现故障。

检查内存泄漏的最简单方法是查看系统的 RAM 使用情况。如果您看到应用程序或进程正在稳步消耗越来越多的内存,则肯定表明存在问题,这有可能就是内存泄漏。例如,在下图中,Google Chrome 使用了大量内存。当然,我们确实打开了五个 Chrome 窗口,其中大约有 20 个打开的选项卡和 32GB RAM。因此,虽然这个数字很高,但实际上并不是问题。现在,如果我查看进程列表并发现 Spotify 使用类似数量的 RAM,这将表明存在问题和潜在的内存泄漏问题。

如何在 Windows 上检查 RAM 使用情况

1)右键单击任务栏,然后选择“任务管理器”。

2)在“进程”选项卡上,对“内存”列进行排序,使最大值位于顶部。

3)评估顶部的应用程序是否使用了正确的内存量。

若要关闭进程,请右键单击该进程,然后选择“结束任务”。

如何在macOS上检查RAM使用情况

1)前往应用程序>实用程序,然后打开活动监视器。

2)选择“活动监视器”窗口顶部的“内存”选项卡。

3)对“内存”列进行排序,使最大值位于顶部。

4)选择要结束的应用或进程,然后选择“停止”按钮。

然后,macOS 会为您提供两个选项 :“退出”“强制退出”。后者将立即尝试终止该过程并删除任何未保存的数据。

如何使用系统监视器检查 Linux 上的 RAM 使用情况

由于每个 Linux 桌面环境都有不同版本的系统监视器,因此遵循的步骤可能会有所不同。通常,我们将在开始菜单、等效的开始菜单或系统搜索工具中输入系统监视器,然后选择最佳匹配项。

系统监视器打开后,对“内存”选项卡或列进行排序,使最大值位于顶部,并确定是否有任何应用或进程使用过多的内存。还有用于检查系统运行状况的 Linux 命令,可以显示 RAM 使用情况。

内存泄漏的后果

内存泄漏的后果和问题取决于客户端或服务器应用程序的使用。

客户端应用程序(台式机和笔记本)

这些设备内存泄漏的后果不是很严重,因为分配的内存会在应用程序终止时释放。因此,不存在系统不稳定。内存使用率过高会遇到的一些问题可能是:

1)您的系统可能会开始变慢。

2)计算机上的应用程序可能会突然关闭。

3)计算机的应用程序代码分配内存可能会崩溃并导致错误。

但是,在更严重的情况下,内存泄漏可能会带来安全问题,可能导致数据丢失等。

服务器应用程序

服务器的内存泄漏问题会很严重,因为服务器通常会长时间运行而不重新启动。产生的问题与桌面应用程序的问题相同,内存会在数天、数周和数月内消耗,服务器性能会下降。错误开始出现,导致服务器最终停止工作。

与客户端应用程序类似,长期存在的内存泄漏可能会带来安全问题,从而破坏数据,造成数据丢失。

如何防止内存泄漏

在编码方面,大多数编程语言都具有帮助开发人员进行自动内存管理的功能,例如垃圾回收站,它有助于释放未使用的内存。垃圾回收站有多种类型,了解应用程序的垃圾回收站的功能是防止内存泄漏的重要步骤。

防止内存泄漏的另一种方法是编写代码来处理不需要的资源。我们通过编写特定的代码,向应用程序指示资源的工作已完成,并且不再使用内存。确保代码完全执行,以避免发生内存泄漏。

但是,如果你没有编码,只是在家用电脑上遇到内存泄漏,重新启动系统将修复内存泄漏,并可能防止它再次发生(如果这是一个临时错误)。您还应该更新您正在使用的操作系统,无论是 Windows、macOS 还是 Linux。通过错误代码或其他错误引入的内存泄漏可能会通过更新得到补救,无论是对操作系统还是相关程序。让您的机器保持最新状态始终很重要!

如何使用 Windows 的内置工具修复内存泄漏

之前,我们详细介绍了如何发现和修复 Windows、macOS 和 Linux 的内存泄漏。但是,您可以尝试一些其他方法来修复 Windows 上的内存泄漏。

Windows 资源监视器

Windows 资源监视器还可以通过提供系统资源的实时数据来帮助您了解内存泄漏问题。

1)在“开始”菜单搜索栏中输入“资源监视器”,然后选择“最佳匹配”。

2)选择“内存”选项卡。

3)对“提交”选项卡进行排序以显示最大值。

和以前一样,您必须弄清楚是否有任何应用程序使用了过多的内存。

如何禁用启动时运行的程序

有时,启动时运行的程序可能会导致内存泄漏。要解决此问题,请禁用该应用程序以确保它在启动系统时不会再引起问题。

1)按 Ctrl + Shift + Esc 打开任务管理器,然后打开“启动”选项卡。

2)找到要在启动时停止启动的程序。

3)右键单击并选择禁用。

请注意,尽管这将阻止任何与启动相关的内存泄漏问题,但如果稍后打开程序,内存泄漏问题可能会持续存在。如果是这种情况,我们建议卸载该程序。

减少内存泄漏,帮助计算机提高性能

内存泄漏可能会显着降低计算机的速度,最终导致计算机崩溃。它们的范围从令人沮丧到危险,并导致严重的系统稳定性问题。

请记住,解决内存泄漏问题的最佳选择之一是更新您的系统和您正在使用的应用程序,因为内存泄漏可能源于某种错误。

原文标题:What Is a Memory Leak and How Do They Happen?

原文作者:GAVIN PHILLIPS