ESXI虚拟机中部署docker会降低服务器性能


在 8 核 16GB 的 ESXi 虚拟机中部署 Docker 的性能影响分析

在 ESXi 虚拟机中运行 Docker 容器时,性能影响主要来自以下几个方面:

  1. 虚拟化开销:ESXi 虚拟化层和 Docker 容器化层的叠加。
  2. 资源竞争:虚拟机与容器之间对 CPU、内存、网络和存储资源的争用。
  3. 调度延迟:ESXi 和 Docker 的双层调度可能增加任务响应时间。

以下是详细分析和优化建议。


1. 性能影响分析

(1) CPU 性能
  • 虚拟化开销
    • ESXi 虚拟化引入约 5%~10% 的 CPU 开销。
    • Docker 容器化引入约 2%~5% 的 CPU 开销。
    • 总开销:约 7%~15%
  • 调度延迟
    • ESXi 和 Docker 的双层调度可能增加任务切换时间,导致延迟波动。
(2) 内存性能
  • 内存开销
    • ESXi 虚拟化占用约 1~2GB 内存(用于 Hypervisor 和管理)。
    • Docker 容器化占用约 100~500MB 内存(用于容器运行时和镜像缓存)。
    • 总开销:约 1.1~2.5GB
  • 内存竞争
    • 若容器内存需求较高,可能触发虚拟机内存交换(Swap),显著降低性能。
(3) 网络性能
  • 虚拟网络开销
    • ESXi 虚拟交换机(vSwitch)引入约 5%~10% 的网络延迟。
    • Docker 容器网络(如 bridge 模式)引入约 2%~5% 的延迟。
    • 总开销:约 7%~15%
  • 带宽限制
    • 虚拟机网络带宽受 ESXi 主机配置限制(如 1G/10G 网卡)。
(4) 存储性能
  • 虚拟存储开销
    • ESXi 虚拟磁盘(VMDK)引入约 5%~10% 的 I/O 延迟。
    • Docker 容器存储(如 OverlayFS)引入约 2%~5% 的延迟。
    • 总开销:约 7%~15%
  • IOPS 限制
    • 虚拟机磁盘 IOPS 受底层存储性能限制(如 SAS RAID 5)。

2. 性能影响量化

(1) 资源占用估算
资源ESXi 开销Docker 开销总开销剩余资源
CPU5%~10%2%~5%7%~15%85%~93%
内存1~2GB100~500MB1.1~2.5GB13.5~14.9GB
网络延迟5%~10%2%~5%7%~15%-
存储延迟5%~10%2%~5%7%~15%-
(2) 并发能力估算
  • SIP 信令处理
    • 单核 vCPU 可处理约 1,000~1,500 TPS
    • 8 核 vCPU 可处理 8,000~12,000 TPS
    • 考虑虚拟化和容器化开销,实际性能约为 6,800~10,200 TPS
  • 并发会话数
    • 每个 SIP 会话平均产生 0.5~1 TPS
    • 可支持 6,800~10,200 并发 SIP 会话

3. 优化建议

(1) CPU 优化
  • 绑定 vCPU:将虚拟机 vCPU 绑定到物理 CPU 核心,减少上下文切换。
    # ESXi 命令行
    vmdumper <VM_ID> setaffinity 0-7
    
  • 限制容器 CPU:为 Docker 容器设置 CPU 配额,避免资源争用。
    docker run --cpus="2" <image>
    
(2) 内存优化
  • 预留内存:为虚拟机预留 16GB 内存,避免内存交换。
    # ESXi 虚拟机设置
    memoryReservationLockedToMax = "TRUE"
    
  • 限制容器内存:为 Docker 容器设置内存限制。
    docker run --memory="4g" <image>
    
(3) 网络优化
  • 使用 Host 网络模式:减少 Docker 容器网络开销。
    docker run --network="host" <image>
    
  • 启用 SR-IOV:若 ESXi 主机支持,为虚拟机分配 SR-IOV 虚拟功能(VF)。
(4) 存储优化
  • 使用本地存储:将 Docker 容器数据存储到虚拟机本地磁盘,避免共享存储延迟。
  • 启用 Overlay2:使用 Overlay2 存储驱动,减少容器存储开销。
    # Docker 配置文件
    {
      "storage-driver": "overlay2"
    }
    

4. 性能验证

(1) 压力测试工具
  • SIPp:模拟并发 SIP 信令。
    sipp -sn uac <kamailio_ip> -i <client_ip> -d 10000 -m 10000 -r 1000
    
  • 监控指标
    • SIP 事务/秒(TPS):目标 ≥6,800 TPS。
    • 响应延迟(P99):≤5 ms。
(2) 资源监控
  • ESXi 监控
    • 使用 esxtop 查看虚拟机 CPU、内存、网络和磁盘使用率。
  • Docker 监控
    • 使用 docker stats 查看容器资源占用。
    docker stats <container_id>
    

5. 总结

  • 性能影响
    • 在 8 核 16GB 的 ESXi 虚拟机中部署 Docker,总体性能下降约 7%~15%
    • 可支持 6,800~10,200 并发 SIP 会话
  • 优化建议
    • 绑定 vCPU、预留内存、限制容器资源。
    • 使用 Host 网络模式和 Overlay2 存储驱动。
  • 适用场景
    • 中小型 VoIP 系统,适合开发和测试环境。
    • 若需更高性能,建议直接使用物理机部署 Kamailio 和 Docker。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的基本指令(二)

一、移动和重命名指令mv 1.1基本作用及使用规范 基本作用是进行文件的移动和重命名&#xff0c;使用规范如&#xff1a; mv src[目录/文件]dst[路径/文件] 回车 1.2三种不同的作用 通过在src部分和dst部分写入不同的内容&#xff0c;来实现文件的移动和重命名的等不同功能…

【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

qt-Quick笔记之Dark Mode And Light Mode In Application

qt-Quick笔记之Dark Mode And Light Mode In Application code review! 文章目录 qt-Quick笔记之Dark Mode And Light Mode In Application1.运行2.目录结构3.main.qml4.main.cpp5.main.pro6.main.qrc 本例修改自视频教程&#xff1a;Qt QML | &#x1f319; Dark Mode And ☀…

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本&#xff0c;例如“Visual Studio Community”&#xff08;免费版本&#xff09;&#x…

基于Springboot框架的学术期刊遴选服务-项目演示

项目介绍 本课程演示的是一款 基于Javaweb的水果超市管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附…

【C++篇】位图与布隆过滤器

目录 一&#xff0c;位图 1.1&#xff0c;位图的概念 1.2&#xff0c;位图的设计与实现 1.5&#xff0c;位图的应用举例 1.4&#xff0c;位图常用应用场景 二&#xff0c;布隆过滤器 2.1&#xff0c;定义&#xff1a; 2.2&#xff0c;布隆过滤器的实现 2.3&#xff0c; 应…

GESP2023年12月认证C++六级( 第三部分编程题(1)闯关游戏)

参考程序代码&#xff1a; #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <string> #include <map> #include <iostream> #include <cmath> using namespace std;const int N 10…

list容器(详解)

list的介绍及使用&#xff08;了解&#xff0c;后边细讲&#xff09; 1.1 list的介绍&#xff08;双向循环链表&#xff09; https://cplusplus.com/reference/list/list/?kwlist&#xff08;list文档介绍&#xff09; 1. list是可以在常数范围内在任意位置进行插入和删除的序…

RGB565转BITMAP[C#---2]

这是楼主在开发C#上位机的时候遇到的另一个问题&#xff0c;怎么把RGB565转为BITMAP&#xff0c;在CSDN上搜索&#xff0c;要么是安卓平台的&#xff0c;要么是2011年的古早代码&#xff08;还没排版&#xff09;&#xff0c;还是靠自己和DEEPSEEK的智慧解决了(●’◡’●) 当然…

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…

【赵渝强老师】Spark RDD的依赖关系和任务阶段

Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型&#xff1a;窄依赖和宽依赖。 窄依赖&#xff1a;如果父RDD的每一个分区最多只被一个子RDD的分区使用&#xff0c;这样的依赖关系就是窄依赖&#xff1b;宽依赖&#xff1a;如果父RDD的每一个分区被多个子RD…

为何在Kubernetes容器中以root身份运行存在风险?

作者:马辛瓦西奥内克(Marcin Wasiucionek) 引言 在Kubernetes安全领域,一个常见的建议是让容器以非root用户身份运行。但是,在容器中以root身份运行,实际会带来哪些安全隐患呢?在Docker镜像和Kubernetes配置中,这一最佳实践常常被重点强调。在Kubernetes清单文件中,…

Docker 安装详细教程(适用于CentOS 7 系统)

目录 步骤如下&#xff1a; 1. 卸载旧版 Docker 2. 配置 Docker 的 YUM 仓库 3. 安装 Docker 4. 启动 Docker 并验证安装 5. 配置 Docker 镜像加速 总结 前言 Docker 分为 CE 和 EE 两大版本。CE即社区版&#xff08;免费&#xff0c;支持周期7个月&#xff09;&#xf…

[MRCTF2020]Ez_bypass1(md5绕过)

[MRCTF2020]Ez_bypass1(md5绕过) ​​ 这道题就是要绕过md5强类型比较&#xff0c;但是本身又不相等&#xff1a; md5无法处理数组&#xff0c;如果传入的是数组进行md5加密&#xff0c;会直接放回NULL&#xff0c;两个NuLL相比较会等于true&#xff1b; 所以?id[]1&gg…

Deep Crossing:深度交叉网络在推荐系统中的应用

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 在机器学习和深度学习领域&#xff0c;特征工程一直是一个关键步骤&#xff0c;尤其是对于大规模的推荐系统和广告点击率预…

C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程

1. thread对象的析构问题 在 C 多线程标准库中&#xff0c;创建 thread 对象后&#xff0c;必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策&#xff0c;程序将会终止。 然而&#xff0c;在创建 thread 对象后、调用 join 前的代码中&#xff…

Rust中使用ORM框架diesel报错问题

1 起初环境没有问题&#xff1a;在Rust开发的时候起初使用的是mingw64平台加stable-x86_64-pc-windows-gnu编译链&#xff0c;当使用到diesel时会报错&#xff0c;如下&#xff1a; x86_64-w64-mingw32/bin/ld.exe: cannot find -lmysql具体信息很长这是主要信息是rust找不到链…

Fastdds学习分享_xtpes_发布订阅模式及rpc模式

在之前的博客中我们介绍了dds的大致功能&#xff0c;与组成结构。本篇博文主要介绍的是xtypes.分为理论和实际运用两部分.理论主要用于梳理hzy大佬的知识&#xff0c;对于某些一带而过的部分作出更为详细的阐释&#xff0c;并在之后通过实际案例便于理解。案例分为普通发布订阅…

Windows:AList+RaiDrive挂载阿里云盘至本地磁盘

零、前言 电脑存储的文件多了&#xff0c;出现存储空间不够用的情况。又没前买新的硬盘或者笔记本电脑没有额外的插槽提供给新的硬盘。遇到这种情况&#xff0c;我想到可以使用网盘&#xff0c;但单纯的网盘又要上传下载&#xff0c;极其麻烦。看到WPS云盘可以直接挂载本地&…

Unity游戏(Assault空对地打击)开发(3) 摄像机的控制

详细步骤 打开My Assets或者Package Manager。 选择Unity Registry。 搜索Cinemachine&#xff0c;找到 Cinemachine包&#xff0c;点击 Install按钮进行安装。 关闭窗口&#xff0c;新建一个FreeLook Camera&#xff0c;如下。 接着新建一个对象Pos&#xff0c;拖到Player下面…