运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写。
随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向公共云迁移,以利用云经济效益、规模和速度。我最近参与了其中一种企业工作负荷 - 云中的大数据。在此,我将与您分享一些提示和最佳做法。
该项目要求使用预构建 Linux 映像在 Windows Azure 中部署多节点 Hadoop 群集。我使用 Windows Azure 镜像库中的 CentOS 6.3 映像配置了一个中型虚拟机 (VM),并继续部署单节点核心 Hadoop。一切都很正常,只是当我开始测试稍繁重的工作负荷时,我发现 VM 会经常冻结或变得反应迟钝。
不难看出,这与中型 VM 的资源有关 – 毕竟它只有 2 个 CPU 核及 3.5 GB 内存。但是,我没想到整个 VM 会变得反应迟钝甚至开始掉线。在与我的朋友和同事讨论此问题之后,我们确信是因为 VM 根本没有配置交换空间(即,Windows 上所说的页面文件)。因此,当内存压力增加时,其虚拟内存系统无法交换至磁盘。
您可以检查系统如何通过在 Linux shell 提示符下运行“free”命令来查看系统如何使用内存,尤其是,您可以使用“cat /proc/swaps”查看交换空间的状态 – 配置的内存大小,以及正在使用中的内存大小。请参阅下面的屏幕截图。

默认情况下,对于在 Windows Azure 虚拟机中配置的 Linux VM,根本未配置交换空间, 因此“cat /proc/swaps”不会返回任何内容,同样,“free”命令不会显示任何正在交换的活动。
一个有趣的问题是,为什么使用 Linux 库映像(即来自 Windows Azure 镜像库的映像)的 VM 配置不会自动配置交换空间。我们思考了一下发现这是因为用户应该决定交换空间的大小和位置并进行后期配置。但是,很有可能出现这种情况:某位用户持续使用从未配置交换空间的 VM,直到进程开始崩溃或 VM 冻结。
也就是说,一旦我们意识到我们需要做的就是配置交换空间,便立即按照一系列简单步骤在资源磁盘上配置基于文件的交换空间;Windows Azure 中的中型虚拟机配备 135 GB 的资源磁盘,安装为“/mnt/resource”。下面介绍在 VM 上配置基于文件的交换空间的步骤。
· 使用“fallocate”命令分配适当大小的交换文件,如在资源磁盘上分配 5GB。语法为:“fallocate -l 5g /mnt/resource/swap5g”,其中“swap5g”是文件名
· 使用“chmod”命令更改文件的权限,确保只有root用户具有交换文件的读/写权限。语法为:“chmod 600 /mnt/resource/swap5g”
· 使用“mkswap”命令将文件设置为交换区域。语法为:“mkswap /mnt/resource/swap5g”
· 使用“swapon”命令启用交换文件。语法为:“swapon /mnt/resource/swap5g”
· 现在,交换空间可供使用,并且通过“cat /proc/swaps”命令应该可以进行确认。向“/etc/fstab”文件添加条目,这样即使 VM 在 Azure 中进行回收,仍可保留交换设置。语法为:echo “/mnt/resource/swap5g none swap sw 0 0” >> /etc/fstab
下图是在我的 VM 上执行上述命令的记录。

鸣谢:感谢我的同事 Amit Srivastava 帮助我排查和解决交换问题。
本文翻译自:
运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分的更多相关文章
- 在 Windows Azure 虚拟机中使用 Microsoft SQL Server 安全功能
编辑人员注释:本文章由 SQL Server 团队高级项目经理 Sung Hsueh 撰写. SQL Server 的最新用法之一是利用 Microsoft 的 Windows Azure 基础结构服 ...
- 在 Windows Azure 虚拟机中如何备份和还原 Windows 系统磁盘
备份和还原对于操作真实的系统来说至关重要.对于 Windows Azure 虚拟机环境中的 Windows Server,可以根据自身的需求选择多种不同的工具或将这些工具结合使用来实现备份.下面将对这 ...
- Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...
- VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录
VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...
- 创建并使用Windows Azure虚拟机模板
在现实的IaaS应用中,往往会创建自己的虚拟机映像模板,以满足快速应用部署的目标,如预先配置好某些应用.管理与监控管理等. 1.登录到Windows Azure Dashboard中创建一个做为模板的 ...
- 探索 Windows Azure 网站中的自动伸缩功能
去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...
- ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session
Session 嘛,占一点儿服务器资源,但是总归比 ViewState 和 Cookie 安全点儿,所以还是要用的. Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本无法保证 ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- 进一步探索:Windows Azure 网站中解锁的配置选项
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...
随机推荐
- MediaPlayer类——播放视频和音乐
1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer ...
- 搭建lamp环境Q&A
Q1:no acceptable C compiler found in $PATH A:yum -y install gcc Q2:红帽没有注册,无法使用yum A:vim /etc/yum.rep ...
- Java开发工具IntelliJ IDEA单元测试和代码覆盖率图解
原文 http://www.cnblogs.com/xiongmaopanda/p/3314660.html Java开发工具IntelliJ IDEA使用教程:单元测试和代码覆盖率 本文将展示如何使 ...
- Unity3d GUI弹窗
ArrayList w_position = new ArrayList(); void OnGUI() { if (GUILayout.Button("Open")) { if ...
- ubuntu qt X11开发环境
- AndroidUI 视图动画-自定义动画效果 (Animation)
如果Android提供的四种动画 效果 和混合动画效果 不能够 满足需求的话,可以使用自定义动画效果 : 新建一个类CustomAnimation 使其继承自 android.view.animati ...
- php 多维数组 arrayList array()
<pre name="code" class="php">$params=array( "tid"=>"3&qu ...
- #include <process.h>
1 _beginthread 单进程,单线程,必须干完一件事情后干另一件事情 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl ...
- H264源码分析(四)
sub_mb_pred( mb_type ) { for( mbPartIdx = 0; mbPartIdx < 4; mbPartIdx++ ) ...
- 使用Transaction访问数据库(C#,TransactionScope,.NET 2.0)
针对SQL2005和.NET 2.0的事物机制有了新的突破传统数据库事物访问机制,代码如下: 或者这种,其实都差不多 ...