1- 为什么要调优

___ KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化。

___ KVM性能优化主要在CPU、内存、I/O这几方面。当然对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。

2- 优化

2.1- cpu

___ 考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机CPU的总数目。如果超过,则将对性能带来严重影响,建议选择复制主机CPU配置。

2.2- 内存

2.2.1- KSM(Kernel Samepage Merging,相同页合并)

___ 内存分配的最小单位是page(页面),默认大小是4KB,可以将host机内容相同的内存合并,以节省内存的使用,特别是在虚拟机操作系统都一样的情况下,肯定会有很多内容相同的内存值,开启了KSM,则会将这些内存合并为一个,当然这个过程会有性能损耗,所以开启与否,需要考虑使用场景。

___ 而KSM对KVM环境有很重要的意义,当KVM上运行许多相同系统的客户机时,客户机之间将有许多内存页是完全相同的,特别是只读的内核代码页完全可以在客户机之间共享,从而减少客户机占用的内存资源,能同时运行更多的客户机。

___ KSM会稍微影响系统性能,以效率换空间,如果系统的内存很宽裕,则无须开启KSM,如果想尽可能多地并行运行KVM客户机,则可以打开KSM。

ll /sys/kernel/mm/ksm/ //查看内核信息
pages_shared #合并的页面数
pages_sharing #正在共享单个页面的虚拟页面数
page_unshared #作为共享候选者但当前未共享的页数
page_volatile #作为共享候选者但频繁更改的页数,KSM服务不会合并这个页面
full_scan #为重复内容扫描KSM的次数
merge_across_nodes #是否允许在NUMA节点中执行合并
pages_to_scan #一次扫描的页数,该数字会影响系统性能
sleep_milisecs #扫描之间的时间间隔
每个页面的大小为4KB,可计算出共享内存为:4页面数=内存大小(KB) cat /sys/kernel/mm/ksm/run //是否开启KSM,0是不开启,1是开启
echo 1 > run //临时开启KSM,只能使用重定向,不支持VI编辑器
vi /etc/rc.local //添加echo 1 > /sys/kernel/mm/ksm/run,让KSM开启自启 cat /sys/kernel/mm/ksm/pages_to_scan //定期扫描相同页,sleep_millisecs决定多长时间,
pages_to_scan决定每次查看多少个页面,默认为100,越大越好,超过2000无效,
需要开启两个服务ksmtuned和tuned支持更过页面

2.2.2- 对内存设置限制

___ 有多个虚拟机,为了防止某个虚拟机无节制地使用内存资源,导致其他虚拟机无法正常使用,就需要对内存的使用进行限制。

___ 如果我们有多个虚拟机,为了防止某个虚拟机无节制地使用内存资源,导致其他虚拟机无法正常使用,就需要对内存的使用进行限制。

virsh memtune vm_name ##查看虚拟机内存限制,单位为KB
hard_limit : unlimit ## 强制最大内存
soft_limit : unlimit ## 可用最大内存
swap_hard_limit : unlimit ## 强制最大swap使用大小 例如:
virsh memtune vm_name --hard-limit 1024000 --live //设置强制最大内存并且在线生效

2.2.3- 大页后端内存(Huge Page Backed Memory)

___ 在逻辑地址向物理地址转换时,CPU保持一个翻译后备缓冲器TLB,用来缓存转换结果,而TLB容量很小,所以如果page很小,TLB很容易就充满,这样就容易导致cache miss,相反page变大,TLB需要保存的缓存项就变少,就会减少cache miss。通过为客户机提供大页后端内存,就能减少客户机消耗的内存并提高TLB命中率,从而提升KVM性能。

___ Intel的x86 CPU通常使用4KB内存页、但是经过配置,也能够使用大页(huge page): x86_32是4MB,x86_64和x86_32 PAE是2MB,这是KVM虚拟机的又一项优化技术。

使用大页,KVM的虚拟机的页表将使用更少的内存,并且将提高CPU的效率。

cat /proc/meminfo ## 查看内存信息,无可用最大页
AnonHugePages: 292864 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages:Surp: 0 echo 25000 > /proc/sys/vm/nr_hugepages //指定大页需要的内存页面数量(临时生效) cat /proc/meminfo ## 查看内存信息,无可用最大页
AnonHugePages: 292864 kB
HugePages_Total: 510
HugePages_Free: 510
HugePages_Rsvd: 0
HugePages:Surp: 0 sysctl -w vm.nr_hugepages=25000 //指定大页需要的内存页面数永久生效,
或者在/etc/sysctl.conf中添加vm.nr_hugepages=2500来持久设定大页文件系统需要的内存页面数。

2.2.4- I/O的优化

___ 为了避免过度消耗磁盘资源而对其他的虚拟机造成影响,我们希望每台虚拟机对磁盘资源的消耗是可以控制的。比如多个虚拟机往硬盘中写数据,谁可以优先写,就可以调整I/O的权重weight,权重越高写入磁盘的优先级越高。

___ 对磁盘I/O控制有两种方式:

1 在整体中的权重,范围在100~1000。

2 限制具体的I/O.

virsh blkiotune vm_name ##查看vm_name的I/O参数
weight : 0
virsh blkiotune vm_name --weight 500 ##设置权重为500
virsh blkiotune vm_name ##再次查看
weight : 500 virsh edit vm_name ##也可编辑虚拟机的XML配置文件
<blkiotune>
<weight>500</weight>
</blkiotune>

2.2.5- 系统调优工具tuned/tuned-adm

___ tuned是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系统设置,达到动态优化系统的目的;tuned-adm是客户端程序,用来和tuned打交道,用命令行的方式管理和配置tuned/tuned-adm,提供了一些预先配置的优化方案可供直接使用。当然不同的系统和应用场景有不同的优化方案,tuned-adm预先配置的优化策略不是总能满足要求,这时候就需要定制,tuned-adm允许用户自己创建和定制新的调优方案。

安装:

yum install tuned -y #安装和启动tuned工具
systemctl start tuned
tuned-adm active ##查看当前优化方案
Current active profile: virtual-guest ##最佳级别,无需优化 tuned-adm list ##查看预先设定好的优化方案 tuned-adm profile virtual-host ##修改优化方案为virtual-host

KVM命令--优化篇(2)的更多相关文章

  1. KVM命令--使用篇(1)

    1. KVM常见使用命令: 1.1 查看命令 列出所有虚拟机 virsh list --all 显示虚拟机信息 virsh dominfo vm_name 显示虚拟机内存和cpu使用情况 virsh- ...

  2. Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试

    日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...

  3. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...

  4. 百度APP移动端网络深度优化实践分享(一):DNS优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...

  5. HDFS集群优化篇

    HDFS集群优化篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统级别优化 1>.优化文件系统(推荐使用EXT4和XFS文件系统,相比较而言,更推荐后者,因为XF ...

  6. KVM总结-KVM性能优化之网络性能优化

    前面已经介绍了KVM CPU优化(http://blog.csdn.net/dylloveyou/article/details/71169463).内存优化(http://blog.csdn.net ...

  7. PowerDNS简单教程(4):优化篇

    目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇 http:/ ...

  8. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...

  9. 《MySQL性能优化篇》阅读笔记

    建表的时候,不要用null赋默认值,如:字符串的设置'',数据类型的设为0,不要将null设为默认值. 在MySQL中没有 full [outer] join,用union代替 各种 JOIN SQL ...

随机推荐

  1. Spring IoC 容器和 bean 对象

    程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包 ...

  2. 如何把您现有的流程系统数据迁徙到驰骋BPM上?

    关键词:流程系统版本切换\ 驰骋BPM. 如何把您现有的流程系统数据迁徙到驰骋BPM上?这是一个大问题.在处理改问题之前,首先要了解驰骋bpm的数据库结构,驰骋bpm的特性在做计划. 驰骋BPM的流程 ...

  3. JAVA&&JAVA WEB开发包U盘封装版

    难以忍受机房的开发环境,就简单实现了将所有的开发文件封装进了U盘. 基于wmic的强大功能,实现了机房变态环境下的设置环境变量OS不用重新启动OS! install.bat @echo off mod ...

  4. Spring框架学习笔记(9)——API接口设计相关知识及具体编码实现

    最近需要设计一个API服务器,想要把API接口搞得规范一下,就通过网上搜集到了一些资料,以下便是自己的一些理解以及相关的具体实现 本文采用的是spring boot+maven的方案 restful规 ...

  5. python函数中的参数类型

    python函数中的参数 动态获取函数的参数 python的函数类型详解

  6. 关于JAVA中源码级注解的编写及使用

    一.注解简介: 1.1.什么是"注解": ​ 在我们编写代码时,一定看到过这样的代码: class Student { private String name; @Override ...

  7. DFS判断图是否有环

      利用_DFS_来判断无向图是否存在环的条件思路,我看一次_DFS_是否能访问到之前访问到的节点,如果能够访问到,就说明图存在环,那么关键问题就是判断是一次DFS?,追根到_DFS_算法的实现细节, ...

  8. spark 性能优化 数据倾斜 故障排除

    版本:V2.0 第一章       Spark 性能调优 1.1      常规性能调优 1.1.1   常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围 ...

  9. OSPF笔记——LSA及其字段,及其作用

    Link State ID Link State ID remains at 32 bits in length, Link State ID has shed any addressing sema ...

  10. 文件图片上传目录 禁止执行php

    apache配置上传目录禁止运行php的方法 导读: 禁止上传目录运行php等可执行文件可以从一定程度上增加网站的安全性, 禁止上传目录运行php的方法可以用.htaccess文件, 也可以直接在ap ...