CloudSim-主机过载检测

本文介绍了几种动态阈值过载检测方法,如iqr、mad和lr,用于虚拟机(VM)资源分配策略中。这些方法通过动态调整阈值,基于历史负载数据预测和防止过载,以维持系统性能。iqr利用四分位差确定阈值,mad使用中位数绝对偏差,lr则采用局部回归预测利用率。这些策略在PowerVmAllocationPolicyMigration类中实现,允许根据实际负载情况动态调整阈值,确保系统的稳定运行。

过载检测


过载检测的工作是为了后面时候准备的,也就是说t时刻完成的检测是便于提前进行迁移,防止在t+1以及后续时刻过载而性能下降。

1、iqr(InterQuartileRange)四份位法【动态阈值方法】


1)初始化一个PowerVmAllocationPolicyMigrationStaticThreshold对象(此对象并非C4中所述的VM选择算法对象,继承自PowerVmAllocationPolicyMigrationAbstract):

a、表示即将进行的是Power-aware的,基于VM迁移的、基于静态固定迁移过载阈值[0.7]的策略的Vms资源分配操作;

b、用于当iqr传入的PowerVmSelectPolicy失效时使用,作为iqr分配算法的的备用分配函数;

c、并定义了自己的主机过载检测isHostOverUtilizated和利用率过载阈值设置函数。

2)产生一个PowerVmAllocationPolicyMigrationInterQuartileRange(继承自VmAllocationPolicyMigrationAbstract)对象,与PowerVmAllocationPolicyMigrationStaticThreshold同族:

a、该对象传入基本的VmSelectionPolicy对象和PowerVmAllocationPolicyMigrationAbstract对象,即PowerVmAllocationPolicyMigrationStaticThreshold作为备用分配策略;

b、过载检测算法核心getHostUtilizationIqr(PowerHostUtilizationHistory)

countNonZeroBeginning(list_data):返回---从后往前看第一个非0数的位置,即从前往后数到最后一个非0位置的元素个数,源码中以大于等于12个为“iqr函数的安全计算元素个数”;

iqr(list_data):返回升序排列后,3/4位置的值与1/4位置的值的差值;

upperThreshold阈值上界设置为:1 - safetyParameter(安全系数,源码里设置该阈值为[1.5])* iqr返回值;

比较PowerHost对象资源利用率与上界的大小,超过即为过载。

3)返回VmAllocationPolicy对象

⚠️ 由于PowerHostUtilizationHistory是动态增加(或者变化的),也就是说得到的iqr值也是变化的,即规定的阈值也是随着历史“负载数据”动态调整的。

⚠️ VmAllocationPolicyMigrationAbstract(默认的阈值为0.9)抽象集成了一个完整的VM分配过程,包括所谓的需迁移的VMs选择和具体分配,每一个继承VmAllocationPolicyMigrationAbstract的类都需要实现自己的isHostOverUtilizated,可以额外实现阈值设置和阈值获取方法,以表示自己的不同。

2、mad(PowerVmAllocationPolicyMigrationMedianAbsoluteDeviation)中位法【动态阈值方法】


1)与iqr同样会有一个PowerVmAllocationPolicyMigrationStaticThreshold作为备用的分配策略;

2)与iqr同理,只是把MathUtil.iqr(list_data)换成MathUtil.mad(list_data),即不是求4份位差值,而是返回"list_data中位数与其他数之间差值的绝对值,所构成的列表的中位数";

3)同样,安全系数mad设置为[2.5]。

3、lr(PowerVmAllocationPolicyMigrationLocalRegression)局部回归法【动态阈值方法】


1)getParameterEstimates(utilizationHistoryReversed):采用简单的局部加权的办法拟合(loess)历史位置和历史负载数据[10个]之间的关系(最小二乘估计参数),其中历史位置根据TriCube办法进行调整,返回估计的回归参数;

2)计算迁移间隔:向上取整 (主机中最大VMs迁移时长【Vm内存占用/带宽】 / 调度周期);

3)预测利用率:estimates[0]+estimates[1]*(10+迁移间隔);

4)过载检测返回:预测的利用 >= 1。

4、lrr(PowerVmAllocationPolicyMigrationLocalRegressionRobust)【动态阈值方法】


5、thr(PowerVmAllocationPolicyMigrationStaticThreshold)【静态阈值方法】


1)纯静态阈值方法;

2)安全系数,源码里面设置的为[0.8],不是默认的0.9。

6、dvfs


1)仅采用:即动态电压频率调整来节点,不采用任何动态Vms资源分配策略

<think>我们正在讨论CloudSimPlus5.0.0,用户关心的是如何在项目中定位cloudsim-plus-5.0.0.jar以及如何确认其是否正确添加。结合之前的对话,用户可能已经通过Maven或手动方式添加了依赖,现在需要验证。###步骤1:确认添加方式-**Maven方式**:依赖在本地仓库中,项目通过pom.xml引用,不会直接出现在项目目录中。-**手动添加**:JAR包位于项目目录下的某个文件夹(如lib)中。###步骤2:查找位置####Maven项目(推荐方式)1.**本地仓库位置**:Maven下载的JAR存储在本地仓库,路径一般为:-Windows:`C:\Users\<用户名>\.m2\repository\org\cloudsimplus\cloudsim-plus\5.0.0\`-Linux/Mac:`~/.m2/repository/org/cloudsimplus/cloudsim-plus/5.0.0/`其中可找到`cloudsim-plus-5.0.0.jar`。2.**项目依赖查看**(IDE中):-**IntelliJIDEA**:-打开项目,查看右侧「Maven」面板→展开「Dependencies」→找到`cloudsim-plus:5.0.0`-或:在项目结构中(`Ctrl+Shift+Alt+S`)→「Modules」→「Dependencies」,查看是否包含该JAR。-**Eclipse**:-在「ProjectExplorer」中展开「MavenDependencies」→查找`cloudsim-plus-5.0.0.jar`。####手动添加JAR的项目1.**项目目录位置**:通常放在`lib`文件夹(项目根目录或`src/main/resources/lib`等自定义位置)。2.**IDE中查看**:-**Eclipse**:右键项目→「BuildPath」→「ConfigureBuildPath」→「Libraries」选项卡→在「Classpath」或「Modulepath」中查看JAR路径[^1]。-**IntelliJ**:`File`→`ProjectStructure`→`Modules`→`Dependencies`→查看「JARsordirectories」中的路径。###步骤3:检查是否生效-**编译检查**:创建一个使用CloudSim核心类的简单测试(如`CloudSim`类):```javaimportorg.cloudsimplus.core.CloudSim;publicclassCloudSimTest{publicstaticvoidmain(String[]args){System.out.println("CloudSimVersion:"+CloudSim.VERSION);}}```运行输出`CloudSimVersion:5.0.0`即表示正确加载[^1]。-**运行时检查**:若出现`NoClassDefFoundError`(如之前引用的CloudSim4.0报错[^2]),需检查:1.JAR是否实际存在(手动添加时路径是否正确)。2.Maven依赖作用域是否为`compile`(默认正确)。3.依赖冲突:使用`mvndependency:tree`命令查看是否有版本冲突(如同时存在CloudSim3.x)。###步骤4:验证容器模块(可选)若使用容器功能(如`ContainerCloudSim`),还需检查`cloudsim-plus-container-5.0.0.jar`是否同步添加(方法同上)[^1]。---###📌关键注意事项1.**依赖树分析**:在Maven项目中执行:```bashmvndependency:tree-Dincludes=org.cloudsimplus```输出应包含:```[INFO]org.example:my-cloudsim-project:jar:1.0-SNAPSHOT[INFO]\-org.cloudsimplus:cloudsim-plus:jar:5.0.0:compile```确保无其他版本覆盖(如3.x)。2.**文件系统验证**(手动添加):直接去项目目录的`lib`文件夹确认是否存在`cloudsim-plus-5.0.0.jar`,并核对文件大小(约700KB)[^1]。---###快速定位流程图```mermaidgraphTDA[添加方式]-->B{Maven}A-->C{手动JAR}B-->D[本地仓库路径]B-->E[IDE依赖视图]C-->F[项目lib目录]C-->G[IDE构建路径]D&E&F&G-->H[运行测试代码]H-->I{输出5.0.0?}I-->|是|J[成功]I-->|否|K[检查依赖冲突/路径]```---§§相关问题§§1.CloudSim5.0的Maven依赖声明中作用域(scope)应该怎么配置?2.如何在IntelliJ中快速查看Maven依赖的本地存储路径?3.出现`java.lang.NoSuchMethodError:org.cloudsimplus.core.CloudSim.<init>()`错误可能是什么原因?</think> ### 在项目中定位和检查 CloudSim Plus 5.0.0 JAR 的方法 #### 🔍 1. **定位 JAR 文件位置** ##### Maven 项目(推荐方式) - 打开项目目录: ```bash cd /项目路径 ``` - 检查本地 Maven 仓库: ```bash ls ~/.m2/repository/org/cloudsimplus/cloudsim-plus/5.0.0/ ``` 路径示例(Windows): ```bash C:\Users\<用户名>\.m2\repository\org\cloudsimplus\cloudsim-plus\5.0.0 ``` 该目录应包含: ``` cloudsim-plus-5.0.0.jar cloudsim-plus-5.0.0.pom ``` ##### IntelliJ/Eclipse 验证(手动添加) - **IntelliJ**: 1. 右键项目 → **Open Module Settings** 2. 进入 **Libraries** → 检查 `cloudsim-plus-5.0.0.jar` 的存储路径 - **Eclipse**: 1. 项目右键 → **Properties** 2. **Java Build Path** → **Libraries** 标签 → 查看 JAR 的完整路径[^1] #### 🧪 2. **验证依赖是否生效** ```java import org.cloudsimplus.core.CloudSim; public class DependencyCheck { public static void main(String[] args) { System.out.println("CloudSim Version: " + CloudSim.VERSION); } } ``` **预期输出**:`CloudSim Version: 5.0.0` #### ⚠ 3. **常见问题排查** 1. **`NoClassDefFoundError` 错误** - 检查是否缺少传递依赖: ```xml <!-- pom.xml 添加 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> <version>3.6.1</version> </dependency> ``` - 手动添加缺少的 JAR(Eclipse: **Properties** → **Add External JARs**)[^2] 2. **版本冲突** 执行 Maven 依赖树检查: ```bash mvn dependency:tree -Dincludes=org.cloudsimplus ``` 输出应包含: ``` [INFO] \- org.cloudsimplus:cloudsim-plus:jar:5.0.0:compile ``` #### 📌 验证步骤总结 | 步骤 | 操作 | 成功标志 | |------|------|----------| | 1 | 检查物理路径 | JAR 存在于 `~/.m2/repository/org/cloudsimplus/` | | 2 | IDE 构建路径 | Eclipse/IntelliJ 的 Libraries 中可见[^1] | | 3 | 运行时检查 | `CloudSim.VERSION` 输出 `5.0.0` | | 4 | 依赖树分析 | `mvn dependency:tree` 显示正确版本 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值