1、修改spring-stats.xml文件
加上
<bean name="memoryMonitorCollector"
class="MemoryMonitorCollectorBean">
<property name="containerWrapper" ref="containerWrapper" />
<property name="statsCollection" ref="statsCollection" />
<property name="maxSeries" value="240" />
</bean>
<bean id="memoryMonitorJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="memoryMonitorCollector" />
<property name="targetMethod" value="collect" />
<property name="concurrent" value="false" />
</bean>
<bean id="memoryMonitorTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="memoryMonitorJobDetail" />
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>
和在scheduler里加上
<ref local="memoryMonitorTrigger" />
2、添加类
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jstripe.tomcat.probe.beans.ContainerWrapperBean;
import org.jstripe.tomcat.probe.beans.stats.collectors.BaseStatsCollectorBean;
import org.jstripe.tomcat.probe.model.SystemInformation;
public class MemoryMonitorCollectorBean extends BaseStatsCollectorBean{
private ContainerWrapperBean containerWrapper;
private String viewName;
private Log logger = LogFactory.getLog(getClass());
public ContainerWrapperBean getContainerWrapper() {
return containerWrapper;
}
public void setContainerWrapper(ContainerWrapperBean containerWrapper) {
this.containerWrapper = containerWrapper;
}
public String getViewName() {
return viewName;
}
public void setViewName(String viewName) {
this.viewName = viewName;
}
public void collect() throws Exception{
SystemInformation systemInformation = new SystemInformation();
systemInformation.setAppBase(getContainerWrapper().getTomcatContainer().getAppBase().getAbsolutePath());
systemInformation.setConfigBase(getContainerWrapper().getTomcatContainer().getConfigBase());
long rate = (systemInformation.getTotalMemory()-systemInformation.getFreeMemory())* 100 / systemInformation.getMaxMemory();
if(rate > 80){
sendSMS(rate);
}
logger.error("The memery userd is "+rate+"%!");
}
public void sendSMS(long memUsed) throws UnknownHostException {
InetAddress inet = InetAddress.getLocalHost();
String sql = "";
//执行短信告警语句
DaoUtils dao = new DaoUtils();
dao.executeUpdate(sql);
}
}
分享到:
相关推荐
NULL 博文链接:https://liu-shui8.iteye.com/blog/561404
4. 源码开放允许用户深入理解工具的工作原理,甚至根据需要进行二次开发。 5. 汉化涉及翻译界面文本、错误消息等内容,需保持与原始功能对应并符合中文语言习惯。 了解这些知识点,开发者或普通用户可以更好地参与...
**探针函数**(Probe Function)在Linux内核驱动开发中扮演着至关重要的角色。它是设备驱动程序中用于完成初始化工作的关键函数之一。探针函数通常在设备驱动注册的最后阶段被调用,它的主要任务是在设备(Device)...
### opensips源码主流程分析 #### 一、概述 `OpenSIPS`(Open Source IP Multimedia ...掌握这些知识点对于深入理解`OpenSIPS`的工作原理以及后续的二次开发都是非常重要的。希望本文能为读者提供有益的帮助。
PHPdisk作为网盘系统的名字,可能是一个基于PHP构建的开源项目,提供了基础架构和功能模块,方便开发者进行二次开发和定制。 3. 探针技术: 在软件开发中,探针是用来监控系统运行状态和性能的工具。在网盘系统中,...
资源大于15MB分2次上传。 清晰度一般。加到11章 第12,13章没有。 第1章 嵌入式系统基础. 1.1 嵌入式系统简介 1.1.1 嵌入式系统定义 1.1.2 嵌入式系统与PC 1.1.3 嵌入式系统的特点 1.2 嵌入式系统的发展 1.2.1...
声明特别声明此工具仅限于安全研究,禁止使用该项目进行违法操作,否则自行承担相关责任特点方便二次开发,快速增加插件支持输出结果到excel文档精简运行参数,方便记忆一把梭如果没有耐心看下面的命令选项,运行...
`e2prom`是一种存储类型,它允许在不破坏芯片的情况下多次进行读写操作。与传统的EPROM相比,`e2prom`增加了电擦除功能,无需特殊设备即可完成数据修改。在嵌入式系统和计算机硬件中,`e2prom`常用于存储BIOS、设备...
CS2395驱动是针对HISI平台的专用驱动程序,主要负责与CS2395芯片进行通信和数据交换。在嵌入式系统和物联网...这个驱动经过验证的可用性意味着它已经在实际环境中稳定运行,用户可以放心使用或作为参考进行二次开发。
理解 FFmpeg 的代码框架和组件间的交互对于开发自定义的音视频处理程序或者进行二次开发是非常重要的。这包括了解如何编写新的编码器、解码器、复用器或解复用器,以及如何将它们集成到 FFmpeg 的生态系统中。同时,...
开发者可以通过阅读源码,深入了解uCGUI的工作机制,也可以在此基础上进行二次开发和定制。 3. **uCProbeSetup.exe**:这可能是uCProbe的安装程序。uCProbe是一款强大的调试工具,它能配合uCGUI进行图形界面的调试...
总的来说,《Linux那些事儿之我是SCSI硬盘》不仅是一本深入浅出的技术书籍,更是对SCSI硬盘驱动开发的一次全面剖析。它揭示了SCSI硬盘在Linux系统中的工作原理,以及驱动程序设计与实现的关键细节,对于希望深入了解...
8. **易用性**:源码应具有清晰的文档和易于理解的结构,方便开发者进行二次开发和定制。 9. **软件/插件**:标签中的“软件/插件”表明这可能是一个可以独立部署的软件,也可以作为其他系统的插件集成。 在实际...
#### 二、I2C驱动分层架构 Linux内核中的I2C驱动通常采用分层设计思想,主要分为两个层次:**总线层**和**设备层**。 1. **总线层**:该层主要关注的是I2C总线本身的管理,包括初始化、配置、读写操作等。它负责...
当执行到内核驱动调用时,尤其是调用到serial8250_init串口驱动的注册,会调用platform_driver_register()函数,这是第二次初始化console_register流程的开始。 至于console对uboot参数的处理,是在start_kernel()...
源代码可以帮助开发者了解其内部工作原理,甚至进行二次开发。配置文件则允许管理员调整CoreDNS的行为,例如添加自定义的DNS记录,或者启用特定的插件功能。 `k8s集群学习.txt` 文件可能是关于如何在Kubernetes集群...
#### 二、AD7859L简介 **1. 引脚功能描述** AD7859L是一款高性能的模数转换器,其主要引脚功能如表1所示。 **2. 寄存器结构** AD7859L包含多个寄存器,包括控制寄存器、A/D转换输出寄存器、状态寄存器、测试寄存器...
通过阅读和修改源代码,不仅可以了解APTo的工作原理,还可以进行二次开发,增强软件功能或适配特定的研究需求。 总而言之,APTo是一个强大的3D Atom Probe数据分析工具,它的开源特性使得研究者能够自由地使用、...
#### 二、Linux设备驱动模型 Linux设备驱动模型主要包括三个核心组件:总线、设备和驱动。 1. **总线 (Bus)** - 定义了设备与驱动之间如何交互的标准,如AHB、APB和PCI总线。 - 总线的`match`函数负责匹配驱动与...