Articles of 内存

在Linux中如何报告内存使用情况?

使用ps,我可以看到大小,vsize(与top的VIRT?相同)和rss(与top的RES?相同)。 (我最多看到的是SHR。) 有人能为我总结这些不同的领域是什么意思?

我如何确定在我的基于Apache / PHP的Web应用程序中明显的内存泄漏的原因?

大约每周一次,但有时甚至几天后运行良好,我的EC2实例变得没有反应。 Munin的内存图表讲述了一个非常简单的故事:分配给“应用程序”的内存开始增长,直到swap完全被使用并且实例被有效地closures为止。 另一个自定义图表显示,不断增长的过程是apache2。 我使用mod_php和几个PHP脚本运行标准的prefork Apache安装程序。 正如你在下面的图表中看到的,触发apache2进程开始消耗越来越多的内存的事情发生了。 我发现了第一个绿色尖峰,并在事情失控之前重新启动了Apache。 第二个秒杀得到了更远,实例必须彻底重新启动。 Munin记忆图 我想知道的是如何最好的debugging。 使用FastCGI设置PHP并让它在自己的进程中运行的缺点是什么是一个很好的方法来找出它是Apache还是PHP和我的代码的组合导致过度的内存使用? 你们会采取什么措施来追踪这个问题? 更新:我能跟踪泄漏后,涉及strace,如马特build议如下。 在find一个在内存中不断增长的apache2进程之后,我又添加了一些error_log()调用到我的PHP脚本中,这个脚本打印出了执行中各个点(使用ps的输出)使用的RSS总量。 然而事实certificate这是误导性的 – 虽然看起来RSS只是在我的脚本执行完毕后才跳转,后来的debugging显示事实并非如此。 小心! 幸运的是,所有这些error_log()调用最终都是有用的。 当我启动strace( strace -p <pid> -tt -o trace.log -s 256 )时,我看到对于每个请求,进程分配了大约400k的内存(寻找“brk”系统调用并减去来自最后一次呼叫的第一个呼叫的参数 – 一些通常会一个接一个地进入)。 然后,我search了包含我的error_log()消息的最近的“写入”系统调用,该消息告诉我脚本内存分配的哪一点。 有一些更具战略意义的调用error_log()调用来更准确地查明位置,我终于find了罪魁祸首。 当我们从我们的PHP脚本调用curl_exec()时,内存泄漏。 一些与处理SSL连接有关的curl代码是做错了事 – 当我切换到HTTP时泄漏消失了。 Curl的更新日志引用了一些在7.19.5(我们在7.18.2)中修复的SSL内存泄漏,所以我会在下一步尝试。 与此同时,我正在运行一个非常低的MaxRequestsPerChild,使Apache保持在合理的范围内。 感谢大家!

当内存需求上升时,Linux不会释放大容量磁盘caching

在2.6.31-302 x86-64内核上运行Ubuntu。 总体问题是,我在“caching”类别中有内存不断上升,即使在我们的应用程序需要它时也不会被释放或使用。 所以这里是我从“免费”命令中得到的。 乍一看,这一切都不寻常。 # free total used free shared buffers cached Mem: 7358492 5750320 1608172 0 7848 1443820 -/+ buffers/cache: 4298652 3059840 Swap: 0 0 0 有人想说的第一件事就是“别担心,linux会自动pipe理这个内存”。 是的,我知道内存pipe理员应该如何工作。 问题在于它没有做正确的事情。 这里“caching”的1.4 GB似乎是保留和不可用的。 我的Linux知识告诉我,3 GB是“免费”的; 但系统的行为却另有说法。 当1.6GB的真实可用内存在高峰使用期间用完时,只要需要更多的内存(并且第一列中的“空闲”接近0),调用OOM杀手,处理被终止,并且问题开始出现即使 – / + buffers / cache行中的'free'仍然有大约1.4 GB的空闲空间。 我已经调整了关键进程的oom_adj值,所以它不会使系统陷入瘫痪,但即使如此,重要的进程也将被杀死,而我们也不希望达到这一点。 特别是当理论上,如果只驱逐磁盘caching,则1.4GB仍然是“免费”的。 有没有人知道这里发生了什么? 互联网充满了关于Linux“自由”命令的愚蠢问题,“为什么我没有任何可用的内存”,因此我找不到任何关于这个问题的信息。 我的脑海里浮现的第一件事就是换掉了。 我们有一个系统pipe理员是坚决的, 如果他们备份,我愿意解释。 这会导致问题吗? 在运行echo 3 > […]

删除linux的cachingram

我有一个networking服务器,有8GB的RAM,并运行一个非常密集的PHP网站(1网站),文件操作,graphics,电子邮件,论坛,你的名字。 这个环境远非静态,这导致我相信从ram中caching任何东西可以获得的东西很less,因为几乎每个对服务器的请求都会创build新的或更新的页面。 而且很多caching都是在客户端完成的,所以当涉及到图像,javascript,css时,我们有大量的304请求。 此外,我确实有语言文件写入服务器上的平面文件,cachingRAM肯定是好的,而不是从磁盘读取。 但只有less数这样的文件。 在大约两周的时间里,我从98%的免费公羊变成了4%的免费公羊。 这发生在我们也推送几个大的svn更新到服务器的时间。 我的问题是,如果我定期使用以下命令清除caching(我知道Linus Torvalds对caching的感受),是否可以更好地调整服务器: sync; echo 3 > /proc/sys/vm/drop_caches 或者我会更好的编辑下面的文件: /proc/sys/vm/swappiness 如果我将30的缺省值replace为60,那么我应该更less地进行交换,并且更多地重用陈旧的高速caching。 看到所有使用第一条命令释放的caching确实感觉很好,但是如果我告诉你这对桌面环境很好,我会对你说谎。 但是,像我上面描述的一个Web服务器呢? 思考? 编辑:我知道,系统将获得内存,因为它需要从caching中的内存,但感谢指出,我们的澄清。 当大多数服务器内存存储在caching中的时候,Apache的速度会变慢吗? 这完全是一个不同的问题吗?

为什么Apache运行这么多的进程? 这里有过多的内存?

我注意到Apache正在我的LAMP服务器(ubuntu 10.10)上运行多个进程。 我只是运行一个MySQL数据库的WordPress网站。 好像www-data运行apache2比它应该更多(也使用太多的内存),我是正确的: ID Owner Size Command 31200 www-data 251236 kB /usr/sbin/apache2 -k start 20678 www-data 250948 kB /usr/sbin/apache2 -k start 25781 www-data 248888 kB /usr/sbin/apache2 -k start 31045 www-data 248844 kB /usr/sbin/apache2 -k start 19926 www-data 246480 kB /usr/sbin/apache2 -k start 20749 www-data 239380 kB /usr/sbin/apache2 -k start 32616 www-data 238632 kB /usr/sbin/apache2 […]

什么消耗java进程中的内存?

我们正在尝试调查中等负载下java进程的内存使用情况。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12663 test 20 0 8378m 6.0g 4492 S 43 8.4 162:29.95 java 正如你所看到的,我们有6Gb的驻留内存。 现在有趣的部分是这个过程是用这些参数来执行的: -Xmx2048m -Xms2048m -XX:新尺寸=512米 -XX:MaxDirectMemorySize =256米 …一些其他的GC和东西 看着这些设置和实际的内存使用情况,我们无意中发现我们期望这个过程使用的是什么以及它实际使用的是什么。 通常我们的内存问题是通过分析堆转储来解决的,但是在这种情况下,我们的内存是在堆外使用的。 问题:尝试找出如此高内存使用率的原因是什么? 什么工具可以帮助我们识别在这个过程中使用什么内存? 编辑0 看起来这不像是一个堆相关的问题,因为我们在那里还有相当多的空间: jmap -heap 12663 结果(编辑以节省空间) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 2147483648 (2048.0MB) […]

购买服务器内存之前需要了解哪些RAM选项?

这是关于服务器内存的一个build议规范问题 。 我必须购买戴尔R420服务器,并有各种组合(1600和1333 MHz的RDIMMS和UDIMMS)和性能优化与高级ECC有和没有保留。 我注意到,UDIMM只有4GB的DIMM,所以我会仔细地去找16GB的RDIMMS。 什么是这些选项,我需要知道些什么?

虚拟机内存使用情况不会出现在TaskManager中

有一些关于Windows内存pipe理的东西,和TaskManager的关系我不明白,我希望有人能够启发我。 如果我正在运行虚拟机(Virtual PC 2007,Virtual Server 2005或VirtualBox,因为它们的行为方式相同,无所谓),并启动TaskManager,我可以在进程选项卡上看到一些虚拟机的条目,但内存值相当小(大约30 MB)。 显然这不包括虚拟机本身正在使用的内存。 您可以使任何各种与内存相关的列都不可见。 “性能”选项卡上的“内存使用情况”对于包括VM在内的总内存使用情况显示为正确。 所以我的问题是为什么虚拟机的内存使用(这将是100的MB)出现在进程选项卡上?

Cent OS:如何closures或减less内存过量使用,安全吗?

有时我的服务器因为内存和交换空间不足而停止运行。 (它保持响应平,但没有比这更甚,甚至没有SSH)。 我被告知linux是否会执行内存过量使用,据我所知,这与银行用金钱所做的一样:假设大多数进程不会真正使用所有要求的内存,至less不是全部在同一时间。 请假设这实际上是我的系统偶尔挂起的原因,我们不要在这里讨论这是否是这种情况(请参阅什么可能导致服务器上的所有服务closures,但仍然响应ping以及如何弄清楚 ) 。 所以, 如何在CentOS中禁用或减less内存过量使用? 我读过有两个名为vm.overcommit_memory(值0,1或2)和vm.overcommit_ratiom的设置,但我不知道在哪里我必须find并更改它们(有些configuration文件希望),我应该尝试什么值,以及是否需要重新启动服务器才能使更改生效。 是安全的吗? 我可以期待什么副作用? 当googling overcommit_memory我发现像人们说他们的服务器无法启动了可怕的东西…. 由于是什么导致内存使用量的突然增加是由于MySQL的查询,而这又是在服务HTTP请求时调用,我期望只是一些PHP脚本无法完成,因此有时500响应时服务器太忙,这是我可以采取的风险(当然更好的是,整个服务器变得无法访问,必须重新启动它)。 或者如果我select了错误的设置,真的可能导致我的服务器无法重新启动?

我怎么知道在FreeBSD服务器上安装了多less内存?

按照标题: 我怎么知道在FreeBSD服务器上安装了多less内存? 谢谢!