什么是虚拟内存(virtual memory)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是虚拟内存(virtual memory)相关的知识,希望对你有一定的参考价值。

上网时显示virtual memory 太低,想调高点,但是不太清楚这东西。
1)虚拟内存是从哪空出来的?是C盘吗?
2)虚拟内存低该删掉哪些东西?
3)虚拟内存要改为多少最好?太高或太低会造成电脑速度慢吗
4)虚拟内存和内存条有关系吗?

首先,内存是电脑里所有程序运行时使用的资源,你的内存条就是提供内存的。考虑到电脑有时候会使用较多的内存,我们可以在硬盘上划分出一个区域作为内存使用,这就是虚拟内存。这个空间可以设置在任何硬盘区域,不一定是c盘。
虚拟内存的设置你可以右键点击桌面上我的电脑,然后按照“属性--》高级--》(性能)设置--》高级--》(虚拟内存)更改”的步骤进入虚拟内存设置界面,进行设置。
虚拟内存会让你设置初始大小和最大值,一般来说你能看到一个推荐值,将初始大小设置为这个即可。最大值可设置为初始大小的1.5-2倍。
希望对你有帮助。
参考技术A 虚拟内存是C盘里划出的一部分,虚拟内存低可以用工具清理系统里的垃圾,或是在系统里把虚拟内存改大一点。虚拟内存的大小我认为应当根据各人的应用情况,虚拟内存与内内存的关系不是很大。如我的电脑的内存是4个G,有时还提示说我的虚拟内存小了,要求清理C盘。

Hive虚拟内存溢出报错:2.9GB of 2.1GB virtual memory used. Killing container.解决办法


一、项目场景

系统版本:Ubuntu18.04
Hadoop版本:Hadoop3.2.2(分布式安装)
Hive版本:Hive3.1.2


二、问题描述

在使用 Hive 执行 select 语句时,出现了 job 分配报错:

...
ERROR exec.Task: Ended Job = job_1639344121150_0015 with errors
ERROR exec.Task: Error during job, obtaining debugging information...
...
Container [pid=20022,containerID=container_123123432324_0015_01_000005] is running 78348374834B 
beyond the 'VIRTUAL' memory limit. Current usage: 247.6 MB of 1GB physical memory used; 
2.9GB of 2.1GB virtual memory used. Killing container.
...

三、原因分析

可以看到,2.9GB of 2.1GB virtual memory used. ,2.1GB 的虚拟内存分配了 2.9GB 的任务,导致内存溢出,容器自动被 killed 掉了。这里的容器具体是 map 容器还是 reduce 容器我们暂且不管它。


四、解决方案

在执行 Hive 语句之前,先为 mapreduce 端设置参数如下:

set mapreduce.map.memory.mb=4096;
set mapreduce.map.java.opts=-Xmx3276M;
set mapreduce.reduce.memory.mb=4096;
set mapreduce.reduce.java.opts=-Xmx3276M;

注:java.opts 是 memory.mb 的 80% 左右,根据内存溢出时提示的内存大小(例如:Current usage: 2.0 GB of 2 GB physical memory used)进行增大内存,增大的最小单位是1GB。

接着再尝试执行我们的 select 语句。参考博客:https://blog.csdn.net/weixin_33581873/article/details/111948418

以上是关于什么是虚拟内存(virtual memory)的主要内容,如果未能解决你的问题,请参考以下文章

第九章 虚拟内存(Virtual Memory)

27 windows_27_windows_Virtual_Memory 虚拟内存

虚拟内存 Virtual Memory

虚拟机无法分配内存 virtual memory exhausted: Cannot allocate memory

virtual memory exhausted: Cannot allocate memory

Hive虚拟内存溢出报错:2.9GB of 2.1GB virtual memory used. Killing container.解决办法