标签: virtual-memory

SQL Server 上发生膨胀

据我所知,只有当主机开始耗尽物理内存时,才会发生膨胀,即使用率超过 90%。我有一个运行在三节点集群中的 SQL 服务器(每个主机中有 64 GB RAM),它被分配了 8 GB RAM 作为来宾。在过去的几个月中,我们一直在遇到各种系统的间歇性性能问题,我们强调的一个方面是 SQL 服务器似乎经常出现内存膨胀。尽管主机内存始终保持在 75% 以下。

我是否误解了气球膨胀的触发因素,并且定期使用 2GB 气球不是什么大问题?

我(希望)附上了一张最近几天值得进行内存监控的图片。

我们正在运行 ESX4.1,来宾 VM 是运行 SQL Server 2008 R2 的 Windows Server 2008 R2

编辑:根据 Chopper3 评论中的以下建议,我们今晚将进行一些更改。对低影响服务器的快速测试似乎产生了正确的影响,所以我们明天应该满负荷运行。可以解释我们最近看到的许多可能的与性能相关的问题。

virtual-memory vmware-esx sql-server-2008

9
推荐指数
1
解决办法
1134
查看次数

如何在 Redhat Linux 上对虚拟内存的最高结果进行排序?

有一个交互键“M”可以按内存排序,好像是在常驻内存上排序。有没有办法对虚拟内存进行排序?我碰巧在 Redhat Linux 上工作,但问题并非特定于该发行版。

linux redhat top virtual-memory sort

8
推荐指数
2
解决办法
2万
查看次数

您如何衡量一组分叉进程的内存占用量?

假设我有一个使用 200MB 内存的进程,它 fork()s:

python -c "import os; data='x'*200000000; os.fork(); raw_input()"
Run Code Online (Sandbox Code Playgroud)

像“top”这样的程序将显示每个进程使用 200MB,而 SHRd 内存很少,因此看起来好像这些进程总共使用了 400MB。但是,因为 fork() 为进程的内存页实现了写时复制 (COW),所以实际情况是进程总共只使用了 200MB。

为什么 top 不显示 COW 的内存比例?有没有办法让它这样做?或者我可以使用另一个命令吗?

注意:OSX 上的“top”似乎有一个 RSHRD 列,可以满足我的期望。我的问题是针对 Linux。

linux memory top virtual-memory

8
推荐指数
1
解决办法
2640
查看次数

基于 Linux 将进程内存从 RAM 交换到交换文件的确切条件是什么?

我的服务器有 8Gigs 的 RAM 和 8Gigs 配置用于交换文件。我正在运行内存密集型应用程序。这些应用程序具有峰值负载,在此期间我们发现交换使用量增加。使用了大约 1 GIG 的交换。

我有另一台带有 4G 内存和 8 Gb 交换的服务器以及类似的内存密集型应用程序在其上运行。但是在这里交换使用非常可以忽略不计。大约 100 MB。

我想知道Linux 将 RAM 中的进程内存交换到交换文件的确切条件或粗略公式是什么。我知道它基于交换因子。它还有什么依据?交换文件大小?任何指向解释这一点的 Linux 内核内部文档/源代码的指针都会很棒。

linux swap virtual-memory

7
推荐指数
1
解决办法
717
查看次数

Linux OOM 磁盘 I/O。另外:交换,它有什么用?

我在我的 Linux (2.6.37) 安装之一上遇到了 OOM 杀手的问题。计算机有 4GB 的内存,我有时会充分利用它。在这些情况下,我希望 OOM 处理程序通过杀死一两个进程来完成它的工作。而不是这样做,或者可能在尝试这样做时,系统会锁定,像没有明天一样进行磁盘 I/O。事情是这样的:我没有启用任何交换。出于某种原因,我的无交换系统仍然被大量磁盘 I/O 锁定,即使适当的行动方案是杀死一两个进程。想法?

整个问题让我怀疑 Linux 是否需要以某种我不知道的方式交换。对是否是这种情况以及原因的解释将不胜感激。我在概念级别(即虚拟内存、分页、过量使用)上熟悉交换的想法,但我想知道是否有任何我可能遗漏的实现细节。

linux swap virtual-memory

7
推荐指数
2
解决办法
2667
查看次数

VMware ESXi 5.0 上的内存过量使用

我想更好地了解 VmWare ESXi 内存过量使用的可能性。我从 VmWare读过这篇论文,所以我熟悉一般概念,例如管理程序交换、内存膨胀和页面共享。似乎这些技术的组合允许相当大程度的过度承诺。但是,我不确定。

我正在部署一个虚拟测试实验室,其中包含 4 组相同的虚拟服务器和工作站以及几个虚拟路由器实例。总体而言,我预计将运行大约 20 台虚拟机,其中包含用于工作站主机的 Windows XP、Windows 7 和 Ubuntu,以及用于服务器的 CentOS 和 Windows 2008 Server 实例。

然而,问题是主机只有 12GB 的 RAM,我无法选择更多内容。我想知道什么是配置主机以在限制范围内实现合理性能的最佳选择。

我有这两个选择:

  • 为每个虚拟机分配尽可能少的 RAM。
  • 分配额外的数量(例如每个实例 4 GB),然后让气球驱动程序完成剩下的工作。
  • 还有什么?

哪个效果更好?机器大多处于闲置状态,所以我没有任何重大的性能期望,但它们应该运行得相当平稳。

virtualization virtual-memory vmware-esxi

6
推荐指数
1
解决办法
2216
查看次数

当占用太多内存时自动挂起/休眠进程

我在具有 16GB RAM 的 8 核 PC 上运行一个小型 Debian 计算集群。我正在运行大约 1k 个任务的批次(每个批次的总预期时间为一个月)。单个任务是单线程的(因此我可以在每台 PC 上并行运行多个任务),不消耗太多 IO(启动时加载几兆字节的数据,退出时转储几兆字节的数据;不与外界通信否则),它的运行时间是未知的(从几分钟到~一周),它的内存消耗是未知的(从几兆字节到~8GB;使用可能会缓慢或快速增长)。我想在一台 PC 上并行执行尽可能多的此类任务,但我想避免过度交换。

所以我有了一个想法:我可以监视这些任务的内存使用情况,并暂停 ( kill -SIGSTOP) 或休眠(使用像CryoPID 之类的工具)任务,这些任务消耗了太多内存,无法稍后重新启动。我所说的内存使用是指“活动虚拟页面”的数量,或分配的数量,而不是实际被触及的共享内存页面(这些任务可能会在不使用它们的情况下分配内存)。

我开始寻找一些工具来做到这一点。我知道我可以ulimit或在内存受限的 cgroup 中运行任务,但是——如果我理解正确的话——这些解决方案将终止进程而不是挂起它。我想避免杀死它们,因为稍后我需要从头开始,这意味着浪费时间。此外,它们实际上无法测量活动虚拟页面的数量。

我可以使用真正的虚拟机,但在这种情况下它们似乎有很大的开销——拥有单独的内核、内存分配等会减少可用内存;我必须运行其中的 8 个。此外,据我所知,他们也会增加计算开销。

我想,实现这种行为的工具会将某些功能与页面错误通知挂钩,该通知将决定每个页面错误是否是暂停进程的时间。但我也不知道有任何工具可以以这种方式工作。

还有其他选择吗?

linux virtual-memory memory-usage

6
推荐指数
1
解决办法
1448
查看次数

什么是非分页池?

我有一台 Server 2008 R2,我每天都在维护它。服务器很好并且运行良好,但它不断向我发送事件 2019 错误日志。“服务器?无法?分配?从?系统?非分页?池?因为?池?是?空的。”

非分页内存和虚拟内存一样吗?分页内存和物理内存一样吗?如何检查系统或驱动程序是使用物理内存还是虚拟内存?

我检查了任务管理器 -> 性能以查看它是否在系统上分配了非页面内存,并且确实如此。我只是想知道这个错误可能是试图告诉我或警告我。

谢谢

virtual-memory memory-leak

6
推荐指数
1
解决办法
4万
查看次数

执行相同工作的服务器的不同 linux 页面缓存行为

我有两组带有 128G 内存的服务器,以它们的配置时间来区分,它们在运行完全相同的守护程序(elasticsearch)时表现非常不同。我使用 elasticsearch 进行全文搜索,而不是日志存储,所以这基本上是一个读取量大的操作,写入次数最少(小于 1MB/s)。这个守护进程 mmap 将大约 350GB 的完整数据集放入其虚拟内存中,然后访问其中的某些部分以服务请求。这些服务器没有配置交换空间。

问题是一组服务器表现良好,每秒发出约 50 个主要故障,平均需要 10MB/s 的磁盘 io 来满足该需求。性能不佳的服务器每秒会出现 500 个主要故障,平均需要约 200MB/s 的磁盘 io 来满足这一要求。磁盘 io 的增加会导致 p95 响应延迟不佳和偶尔过载,因为它达到了 ~550MB/s 的磁盘限制。

它们都位于同一个负载均衡器之后,并且是同一个集群的一部分。我可以看到一台服务器是否表现不佳,这可能是负载差异,但要与 16 台服务器表现不佳和 20 台服务器表现良好有如此明显的区别,它们在不同时间购买+配置,内核/配置级别一定是导致问题的原因。

为了解决这个问题,我怎样才能让这些行为不佳的服务器表现得像那些表现良好的服务器?调试工作应该集中在哪里?

下面是我收集的一些数据,用于查看系统在三个状态中的每一个状态下从sarpage-types工具中执行的操作。

软件: - debian jessie - linux 4.9.25 - elasticsearch 5.3.2 - openjdk 1.8.0_141

首先是来自性能良好的服务器的一些页面错误数据(来自sar -B):

07:55:01 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
08:05:01 PM   3105.89    811.60   2084.40     48.16   3385.30      0.00      0.00    810.35      0.00
08:15:01 …
Run Code Online (Sandbox Code Playgroud)

linux performance virtual-memory elasticsearch

6
推荐指数
1
解决办法
496
查看次数

是否可以仅为特定容器设置 vm.overcommit_memory =1 ?

因此,我正在运行一个在日志中显示此内容的容器:

警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。

我一生的大部分时间都在 Windows 中度过,我对 Linux 大约 80% 是一无所知的,据我所知,当设置此设置时,它会在系统范围内进行,这也会影响所有其他容器。我想这样做吗?

有没有办法只为推荐它的容器设置这个?我应该补充一下,如果有帮助的话,我正在 WSL2 模式下运行 docker 桌面。

更新:根据他的评论中的要求,我添加了这个问题所涉及的容器;它被称为Papermerge。

memory settings virtual-memory docker

6
推荐指数
1
解决办法
2万
查看次数