Articles of 内存

Docker内存泄漏?

我正在运行Docker 0.9.0 uname -a Linux 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 我有40个容器一次运行。 每个容器都相当简单 – 它在Node进程中运行一段代码。 无限循环监听更多的代码片段在Node中运行。 偶尔我会标记这些容器被杀死,然后我启动另一个容器来代替它。 我一直在遇到内存错误。 有时候一切崩溃,Docker报告“无法为新容器分配内存”,有时候套接字上只有一个超时。 不断报告猫meminfo和调用“免费”。 这个报告表明我有足够的内存未使用。 命令 ps –sort -rss -eo rss,pid,command | grep docker 在不同的情况下告诉我,由于新的容器正在取代旧的容器,驻留集大小的内存不断扩大。 如果我现在停止服务,并等待一小时,这有点下降,但从来没有达到以前的水平。 例如,它永远不会回落到原来的40个容器被创build的水平。 pmap `pidof docker` 告诉显示所有条目都是[anon] – 据我所知这是malloc保留的内存。 Docker守护程序RSS分配的崩溃点约为2GB,最新的时候约为40M。 我不确定这是否是Docker漏洞/内存泄漏。 如果免费报告4.5G未使用,这将如何导致内存不足错误? 我的系统没有交换。 重要详细信息:Docker无法通过远程API删除具有AUFS驱动程序错误的已杀死的容器。 由于这个原因,我依靠外部cron通过CLI去除停止的容器。

内存中的操作系统caching增加,导致系统CPU使用率过高

很长的问题,所以请裸露我:我有一个奇怪的问题,我从来没有见过的服务器。 在具有〜30G RAM的机器上,应用程序需要〜10G(分布在数百个进程中)。 随着时间的推移,操作系统开始用高速caching和缓冲区来填充备用RAM(对于Linux来说是完全正常的)。 之前我已经看到过这种情况,没有任何问题,但是在这台机器上,随着空的内存量的减less,在256M的标记处,系统CPU疯狂(在8个CPU上达到100%,持续时间约为3分钟)。 我猜测操作系统正在使用所有的CPU随机播放内存来获得一些空闲空间。 从我对Linux内存pipe理的理解来看,它应该尽可能在RAM中使用自由空间,因为它可以用于操作系统级别的caching,但是当被问及时将其交给任何需要它的应用程序,从过去的经验来看,这不是一个创伤性的体验为CPU。 它总是发生。 那么为什么这里会有所不同呢? 我附加了相关指标的vmstat输出的一小部分(每2秒捕获一次)。 当可用内存达到256M时,您可以看到系统CPU(第14列,右起第3列)开始变得忙碌,然后在30秒后变得非常疯狂。 rb swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 293876 5022848 18797528 0 0 206 1712 20924 12845 29 9 61 1 6 0 0 285324 5022848 18797656 0 0 0 0 18795 11382 23 […]

评估不可纠正的ECC错误和回退方法

我运行一个服务器,刚刚遇到一个我以前没有遇到的错误。 它发出几声嘟嘟声,重新启动,并卡在启动屏幕(bios显示其标志的部分,并开始列出信息)与错误: Node0:DRAM不可纠正的ECC错误 节点1:HT链接同步错误 硬重置后,系统启动良好,尚未报告任何edac-util。 我的研究告诉我,即使在ECC存储器和理想情况下的系统中,一个不可纠正的错误仍然是可能的,并且很可能在系统的某个使用寿命期间发生。 一些报道至less每年一次或更早提出。 服务器运行CentOS 6.5和几个ECC模块。 我已经在试图诊断哪个模块抛出错误来评估这是一个错误,还是像宇宙射线这样的不可避免的事情的结果。 我的研究还表明,当系统暂停时,无法写入日志,唯一可靠的方法是将系统连接到另一个日志,通过串行端口写入日志。 除了通常的edac-util,memtest,压力testing和预防replace,在处理这个错误时还有什么我应该考虑的? 在我search的任何CentOS日志中,我无法find这个崩溃的logging,这与我相信不能将这个错误logging到本地磁盘一致。 这个错误只有在自动重新启动之后由bios报告给我。 是否build议将系统日志写入串行以logging这些types的错误? 使用单个系统可以避免这种故障吗?或者只有使用昂贵的企业解决scheme才能实现这种故障? 我能做些什么来为单个生产服务器的这些故障情况提供后备措施; 如在,生产服务器本身不跨越多台机器,但后备服务器可以存在。

KVM主机不会使用内存进行caching

我有一台运行8个虚拟机的KVM主机(Linux 3.14.32)。 它们被过度configuration(为其分配的内存大于主机上可用的物理内存)。 然而,他们只消耗约85%的物理内存,这应该留下一些caching空间。 但是,主机上的所有内容都很慢,而且可用的报告几乎没有内存用于caching: total used free shared buffers cached Mem: 32224 26767 5457 0 0 3 -/+ buffers/cache: 26762 5461 Swap: 1021 414 607 正如你所看到的5.5 GB被浪费了。 closures虚拟机后,一切恢复正常 – 内核使用260M的caching。 的/ proc / meminfo中: MemTotal: 32997976 kB MemFree: 5543224 kB MemAvailable: 5584332 kB Buffers: 2612 kB Cached: 83876 kB SwapCached: 72524 kB Active: 24721804 […]

来宾操作系统的性能监控

我想知道是否有任何工具可以在虚拟机内使用,并且知道在虚拟化环境中工作。 不用考虑CPU和内存设置的限制,使用Linux顶级工具可能会引起误解。 也许有些有趣的数据可以用VMTools协助收集?

有没有办法限制一个进程在Win7 x64中使用的内存?

我认为Linux可以使用ulimit来做到这一点,我正在寻找类似于Win7 x64的东西。 问题是有些进程并不知道物理内存已经耗尽,并继续分配内存,由于系统是从页面文件分配的,这会使系统变慢。 唯一的方法来恢复是硬重启。 谢谢

VMware ESX虚拟机,Windows 2008 Server R2,内存已满,但进程总在哪里?

我们已经在Windows 2008 R2服务器上build立了一个TFS 2010服务器,并且最近已经开始超时并给予较长的操作时间。 当我login到机器,我可以看到,任务pipe理器性能选项卡说,分配3.86GB,但是当我去进程选项卡,总结所有正在运行的进程,我最终在700和900MB之间,取决于机器运行了多久。 我在类似的标题列表中发现了这个问题,希望它能帮助我: Windows Server 2008 R2中奇怪的内存使用情况 我在列表中运行了SQL查询,给了我下列项目: object_name计数器名称cntr_value cntr_value_MB ————————- ————————- – ———————— SQLServer:缓冲区pipe理器数据库页面988 8.000000000 SQLServer:缓冲区pipe理器空闲页面140 1.000000000 SQLServer:缓冲区pipe理器总页数2923 23.000000000 SQLServer:内存pipe理器目标服务器内存(KB)23384 22.000000000 SQLServer:内存pipe理器总计服务器内存(KB)23384 22.000000000 我不明白这是否解释了记忆问题,但是我认为如果问题与该问题相同,那么最后一列应该表示更高的值。 我甚至将SQL Server的内存使用限制为3GB,而当前进程选项卡显示sqlservr.exe使用92MB的内存。 另外请注意,4GB已经足够用于这台机器了,而且我们在正常运行时没有任何性能问题或问题,但最近的行为变化令人不安。 该机器是在VMware ESX 4.1服务器上运行的虚拟机,可以这样吗? 我已经阅读了VMware使用的“内存气球”,以便在其他紧张的系统中窃取内存,但物理服务器上的可用内存总量为32GB,性能概述说明其中有17个可用。 还有什么我应该看看,或者我应该怎样看待上述数据? 重新启动后,机器回到我所称的可解释的数字,但它在一天中缓慢地回升到4GB,然后开始超时。 另外请注意,我并不是100%肯定内存导致超时,但机器运行良好,直到内存接近那些4GB,所以至less它似乎是链接的,但它当然可以是两个不同的效果从同样的原因。 至less有一个月没有任何窗口的更新至less一个月,无论是好的还是坏的,所以没有任何维护与问题出现时相吻合。

为什么nscd会使用大量的RAM?

我的服务器被占用了。 这实际上是无法使用的。 这似乎是一个可能的罪魁祸首: root 1037 0.0 92.6 1455696 958368 ? Ssl 2012 3:57 /usr/sbin/nscd 这是92%的RAM。 我杀了它,让我的服务器再次运作。 鉴于我现在已经杀死了这个过程,我可以做什么验尸诊断来查明原因是什么? top偶尔会显示高值,这可能表明有可能是文件或networking套接字试图读取的东西? 有什么build议么?

Linux页面caching使用64GB RAM的双CPU服务器上的IO速度变慢

我有一个Linux页面caching,这减慢了IO的巨大问题。 例如,如果我用dd复制lvm分区,linux会将数据caching在缓冲区或caching中(free -m)。 这不是问题,但在缓冲区达到特殊值后,复制过程将停止并减慢到几个mbs或甚至kbs。 我已经做了很多testing,写入磁盘或/ dev / null的问题与源驱动器或目的地无关。 详细: 有两个几乎相同的服务器。 两个都运行CentOS 6.5与相同的内核。 他们有相同的磁盘,相同的设置,相同的其他硬件,在所有方面相同。 唯一的区别是一个服务器有2个CPU和64GB RAM,另一个有1个CPU和32GB RAM。 这也是以下复制过程的图像: http : //i.stack.imgur.com/tYlym.jpg 这里也有一个新版本meminfo。 meminfo来自不同的运行,所以它们的值不是相同的,但是它们是相同的行为: http ://i.stack.imgur.com/4SIJG.jpg 用dd或其他文件系统复制程序开始复制。 缓冲区或caching开始填充。 一切皆好。 缓冲区或caching达到最大数量(在64GB ram服务器上,值为32GB或17GB;在32GB RAM服务器上,所有可用内存) 在64GB ram服务器上,复制过程现在停止或仅限于几个mbs。 在32GB RAM服务器上一切正常。 在64GB ram服务器上,我可以通过强制caching“sync; echo 3> / proc / sys / vm / drop_caches”来解决问题。 但是,当然缓冲区会立即开始再次增长,问题再次出现。 结论: 这个问题要么与第二个CPU有关,要么与内存总量有关。 我有“感觉”这个问题,每个CPU都有自己的32GB内存,复制过程只在CPU上运行。 所以最后复制过程中缓冲区/caching近32GB或其他CPU未使用的内存,然后Linux认为嘿仍有内存,所以让我们进一步增加缓冲区,但硬件下面不能访问内存,或东西像那样。 有没有人有一个想法或解决scheme? 当然,我可以使用dd直接标志,但是这不解决问题,因为也有外部访问通过桑巴等。 EDIT1: 这里还有64GB […]

docker机内存分配

我们有一个相当复杂的Rails应用程序,即将被部署到一台物理主机上。 主机有8个核心和128GB RAM。 该应用程序dockerised,有4种types的容器 Rails公司 networking服务器 Postgres DB Redis DB 工人容器(Resque) 预计Rails和Worker容器将通过在docker-machine中引入更多容器来缩放。 在开发环境中,内存分配给整个docker-machine: docker-machine create -d virtualbox –virtualbox-memory 8192 default 是否有可能控制单个容器的内存限制为多less? 例如,将16GB分配给Postgres,但将Rails容器限制为4GB。 什么样的最小内存应分配给运行docker-machine的服务器主机,这甚至可能吗? 编辑 相关问题: 如何处理Docker内存pipe理? Docker + Apache,内存使用情况如何工作? 编辑2 这个答案https://serverfault.com/a/645888/210752表示容器将根据需要分配内存。 这不是我在开发环境中的经验(默认情况下,docker-machine被分配了2GB)。