Arganzheng's Blog

stay hungry, stay foolish

Metric监控系统

背景 对系统运行中的一些情况进行统一上报,监控,统计和展示。允许业务自定义监控项。有助于了解系统的运行情况,如性能,访问频率,Cache命中率等。 实现 具体参见笔者写的另一篇文章:java服务端监控平台设计 使用 首先需要配置pom.xml,引入monitor-client包: <dependency> <groupId>com.baidu.global.mobile.server.monitor.client</groupId> <artifactId>monitor-client</artifactId> <version>1.0.0</version> &l...

java服务端监控平台设计

需求 功能性监控(availability):我们希望能够及时的发现线上的bug,异常。 性能监控与调优(performance):我们希望能够识别可能的性能瓶颈,并且有数据支撑方便对性能进行调优。比如慢速SQL,缓存命中率,链接池等。 预警报警:我们希望能够第一时间收到线上异常,进行处理。 辅助线上故障定位、故障分析 运维支持:我们系统能够有数据支撑我们进行容量规划、报警和扩容,等。 自动化运维:比如自动扩容;或者根据监控的数据和配置的SLA进行服务降级。等等。 性能监控平台 提供一站式的性能数据收集、计算、存储和展示服务 支持自定义的数据指标名称和数据纬度 提供任意指标任意纬度的实时数据查询 监控对象 1、模...

Java Attach API

Dynamic Loading Agent 前面在介绍JMX的时候说过应用通过MBean来统计监控数据,然后注册到MBeanServer。但是一个MBeanServer要被外部系统访问得到,还需要通过一个Connector将自己暴露出去,大部分实现都是基于RMI。 从Java 5开始JVM的细节是通过PlatformMBeanServer暴露出去的。而PlatformMBeanServer是通过JDK_HOME/lib/management-agent.jar这个Agent完成RMI的Connector暴露的。将其作为Agent的方式是为了能够让外部监控程序(如JConsole和VisualVM)可以根据需要使用Attach API让目标JVM动态创建这个Con...

JMX学习

关于JMX JMX 全称是 Java Management Extensions, Java5.0开始引入,提供连接、监控和管理远程JVM的方式。 MBean 一个MBean是一个被管理的Java对象,有点类似于JavaBean,一个设备、一个应用或者任何资源都可以被表示为MBean,MBean会暴露一个接口对外,这个接口可以读取或者写入一些对象中的属性,通常一个MBean需要定义一个接口,以MBean结尾,例如:DataSourceMBean, 格式为XXXMBean,这个是规范,必须得遵守。 MBeanServer MBean的容器,提供远程访问、命名空间管理和安全服务。 JMX 指定了在 MBeanServer 和 JMX 客户之间通信所使用的协议...

tomcat监控

法一、使用JMX(RMI) 配置允许远程JMX访问: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port={port to access} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname={optional, allow what ip to access this Tomcat} 具体配置如下: $ cd {tomcat-folder} $ vim bin/seten...

MySQL主从同步失败

最近MySQL经常报主从错误,如果是网络问题,应该是间断性的,但是今天早上一直在报错。上去看了一下log,发现一直在报这个错误: 150527 11:30:01 [Note] Slave I/O thread killed while connecting to master 150527 11:30:01 [Note] Slave I/O thread exiting, read up to log 'master-bin.000052', position 308678027 150527 11:30:01 [Note] Slave SQL thread initialized, starting replication in log 'master-bin....

如何限制某个IP对MySQL的访问

背景 昨天下午发布完不久突然收到很多报警邮件,线上所有接口都报处理超时,基本访问不了。查看tomcat日志,发现大量的获取DB链接timeout错误: 2015-05-14 21:28:21,578 [ERROR] [http-nio-8092-exec-155] me.aranzheng.study.nantianmen.web.ManagementController (ManagementController.java:567): has error org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceE...

如何自定义Spring XML Bean配置

我们一直使用Spring XML配置Bean,已经习惯了Spring的Bean定义语法。 <bean id="..." class="..."> <property name="xxx", value="" /> </bean> TIPS Spring 2.0之前使用的是DTD做XML校验,2.0之后开始使用XSD文件。 使用DTD需要在XML开头指定DTD文件的位置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springfra...

任务调度框架设计和实现

Quartz的问题 1. 任务创建者同时也是执行者之一 现象 有时候我们的任务是动态创建的,并且为了友好,会提供界面创建定时任务。这个创建任务的动作往往是放在一个管理后台系统进行,但是我们不希望这个系统因为创建了Quartz任务就作为运行实例参与到任务的调度执行了。Quartz是一个去中心化的实现,没有区分任务创建者和任务执行者,任何Quartz实例都同时兼顾两种身份。 解决方案 Quartz支持RMI调用,可以在管理后台通过RMI让集群中的任何实例创建任务。当然,也可以通过其他RPC方式调用。 缺点 相对比较麻烦。另外,RPC调用在有多台机器的时候负载均衡比较麻烦。 2. 不支持子集群 现象 有时候我们希望任务能够隔离,比如 A和B这两个Qua...

java standalone模板

经常有一些需求需要跑一个standalone程序。不像war有标准的目录结构,standalone需要自己打包,组织好依赖和classpath等。于是搞了一个standalone模板。大概如下: standalone工程目录如下: mystandalone src bin main resources cache conf-mybatis conf-spring ...

×