运行预构建 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 ...
随机推荐
- 表单提交中get与post的区别
在Form里面,可以使用post也可以使用get.它们都是method的合法取值. 1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACT ...
- DNS域欺骗攻击详细教程之Linux篇
.DNS域欺骗攻击原理 DNS欺骗即域名信息欺骗是最常见的DNS安全问题.当一 个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了.DNS欺骗会使那些易受攻 ...
- MySQL存储过程(转载)
转自:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html 1.1 CREATE PROCEDURE (创 ...
- Hibernate防止SQL注入
如果在查询字段中输入单引号"'",则会报错,这是因为输入的单引号和其他的sql组合在一起编程了一个新的sql,实际上这就是SQL注入漏洞,后来我在前台和后台都对输入的字符进行了判断 ...
- Emacs配置erlang开发环境(.emacs 文件)
以前都是用sublime写erlang代码,好处不多说,主要是觉得一点不好用,不能实现函数跳转,及其不方便,尤其是代码一多,头疼.后来折腾过IntelliJ,下了个收费$0.00的版本,风格还是挺稀饭 ...
- JAVA可变参数实例
public class Kebiancanshu { public static void main(String[] args) { System.out.println(average(8, 2 ...
- ubuntu texlive 中文的配置方法
\documentclass[12pt]{article} \usepackage{CJKutf8} \usepackage{indentfirst}%设置第一段缩进,英语中从第二段才有缩进 \use ...
- 网页平面设计 HTML
网页平面设计HTML基础 1.网页的基本元素:文字.图像.超链接 2.HTML的基本机构head.title.body三部分 <html> <head> <title&g ...
- 在.NET下学习Extjs(第三个案例 Array的过滤方法(filter))
Ext.Array.filter(Array array,Function fn,Object scope):Array array是一个数组,fn是过滤函数,scope是作用域,filter返回的是 ...
- Struts2返回Json数据(使用Struts2插件)
这篇我将介绍如何使用Struts2的struts2-json-plugin.jar插件返回JSON数据. 一.其中主要步骤有: 1.将struts2-json-plugin.jar插件拷贝到项目的&q ...