- 浏览: 460365 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
a464697691:
楼主厉害,现在可以使用了
Proxool houseKeepingSleepTime bug修正 -
chenpi529:
楼主好牛逼
Proxool houseKeepingSleepTime bug修正 -
huangxinyu_it:
多谢楼主了
Proxool houseKeepingSleepTime bug修正 -
kokorodo:
谢谢了!
zk中文开发手册pdf版(基于3.5.1) -
superscorpio:
public void testImportInContex ...
MVEL2.0控制流
所用到的资源 见附件
log4j.properties
log4j-1.2.15.jar
slf4j-log4j12-1.5.0.jar
slf4j-api-1.5.0.jar
commons-lang-2.4.jar
一,zk内存监控要点:
Monitor接口是zk提供的zk Engine监听工具, 如果在zk.xml有该配置,zk将在桌面的创建销毁,会话的创建销毁,
以及异步更新时回调相关方法,从而可以统计会话,桌面,更新的数量等等
大致流程:实现该Monitor,的异步更新方法 -> 配置zk.xml中的monitor监听器以及log4j日志项
->添加zul视图,以及视图控制器 -> 测试
二,memory Monitor的的实现
1,Monitor的空实现,方便继承,不必关心不感兴趣的方法
package org.zkway.util.zk; import java.util.List; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Session; import org.zkoss.zk.ui.util.Monitor; /** * 该类仅仅提供Monitor的空实现 * * <p> * Monitor类是zk提供的zk Engine监听工具, 通常用于统计会话,桌面,更新的数量 * * @author sunflower * */ abstract public class AbstractMonitor implements Monitor { /** * 当异步更新之后调用 * <p> * 所谓的更新,其实可以理解为一个异步事件请求, 并不是所有的事件请求都会更新客户端视图, 只是在需要时才修改 */ @Override public void afterUpdate(Desktop desktop) { } /** * 当异步更新之前调用 * <p> * 所谓的更新,其实可以理解为一个异步事件请求, 并不是所有的事件请求都会更新客户端视图, 只是在需要时才修改 */ @Override public void beforeUpdate(Desktop desktop, List requests) { } /** * 当创建新 桌面 的时候调用 * */ @Override public void desktopCreated(Desktop desktop) { } /** * 当桌面销毁时创建 */ @Override public void desktopDestroyed(Desktop desktop) { } /** * 当创建新的session时调用 */ @Override public void sessionCreated(Session sess) { } /** * 当session销毁时调用 */ @Override public void sessionDestroyed(Session sess) { } }
2,memory Monitor的的实现
package org.zkway.util.zk; import java.util.List; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.zkoss.zk.au.AuRequest; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.IdSpace; import org.zkoss.zk.ui.sys.ExecutionCtrl; /** * Zkway内存变化统计 * <p> * 仅监视客户操作的内存变化情况 * * @author sunflower * */ public class ZkwayMemoryStatistic extends AbstractMonitor { static Logger log = LoggerFactory.getLogger(ZkwayMemoryStatistic.class); /** * 常量标识符,标识当前请求作用域内beforeUpdate时的内存大小 */ private static final String REQUEST_MEMORY = "org.zkway.zk.constants.requestMemory"; @Override public synchronized void beforeUpdate(Desktop desktop, List requests) { ExecutionCtrl ec = (ExecutionCtrl) Executions.getCurrent(); List<AuRequest> reqs = (List<AuRequest>) requests; long memory = Runtime.getRuntime().freeMemory(); Executions.getCurrent().setAttribute(REQUEST_MEMORY, memory); for (AuRequest auq : reqs) { auq.activate(); // 激活request,给AuRequest component和page属性赋值,方便下面使用 log.debug("【beforeUpdate】[{}] \tmemory [{}] kb \t{}({}) \tcmd [{}] \tPage [{}]", new Object[] { Executions.getCurrent().getRemoteAddr(), memory / 1024, auq.getComponent().getDefinition() .getName(), auq.getComponent().getId(), auq.getCommand(), getCompPath(auq.getComponent()) }); } } /** * 获得组件的路径 * * @param comp * zk组件 * @return 组件的路径 */ private String getCompPath(Component comp) { StringBuilder sb = new StringBuilder(); Component current = comp; while (current != null) { if ((current instanceof IdSpace) && StringUtils.isNotBlank(current.getId())) { sb.append(" -> ").append(current.getDefinition().getName()) .append("(").append(current.getId()).append(")"); } else { sb.append(" -> ").append(current.getDefinition().getName()); } current = current.getParent(); } sb.append(" ->文件").append(comp.getPage().getRequestPath()); return sb.toString(); } @Override public synchronized void afterUpdate(Desktop desktop) { ExecutionCtrl ec = (ExecutionCtrl) Executions.getCurrent(); long memory = (Long) Executions.getCurrent().getAttribute( REQUEST_MEMORY); long m = memory - Runtime.getRuntime().freeMemory(); memory = memory - m; log .debug( "【afterUpdate 】[{}] \tmemory [{}] kb \tdecrease [{}] kb \tPage [{}] ", new Object[] {Executions.getCurrent().getRemoteAddr(), memory / 1024, m / 1024, ec.getCurrentPage().getRequestPath() }); } }
二,配置zk.xml,添加monitor监听器
<!-- Optional -->
<!-- the following listener is used to see # of sessions, desktops... --> <listener> <description>[Optional] Mointor the statistic</description> <listener-class> org.zkway.util.zk.ZkwayMemoryStatistic</listener-class> </listener>
三,添加视图页面,控制器,测试
<window id="indexWin" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:n="http://www.zkoss.org/2005/zk/native" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="http://www.zkoss.org/2005/zk/client/attribute" apply="org.zkway.ctrl.IndexController"> <!-- borderlayout如果有父节点,那么必须设置height属性,否则不显示 --> <borderlayout height="1800px"> <!-- 北(上) --> <north height="100px" style="background-image:url(images/bg.png);"> <div> <button forward="onTestMemory" id="btnTestMemory" label="test memory" /> </div> </north>
import java.util.HashMap; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericComposer; public class IndexController extends GenericComposer { private static final long serialVersionUID = -3801962286418473844L; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); } public void onTestMemory() { for (int i = 0; i < 1000; i++) new HashMap(100); } }
监控记录
【beforeUpdate】[127.0.0.1] memory [7105] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> north -> borderlayout -> window(indexWin) ->文件//WEB-INF/content/index.zul]
【afterUpdate 】[127.0.0.1] memory [7098] kb decrease [7] kb Page [//WEB-INF/content/index.zul]
【beforeUpdate】[127.0.0.1] memory [7052] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> window(welcomeWin) ->文件/WEB-INF/content/welcome.zul]
【afterUpdate 】[127.0.0.1] memory [7045] kb decrease [6] kb Page [/WEB-INF/content/welcome.zul]
【beforeUpdate】[127.0.0.1] memory [7006] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> north -> borderlayout -> window(indexWin) ->文件//WEB-INF/content/index.zul]
【afterUpdate 】[127.0.0.1] memory [6999] kb decrease [6] kb Page [//WEB-INF/content/index.zul]
【beforeUpdate】[127.0.0.1] memory [6953] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> window(welcomeWin) ->文件/WEB-INF/content/welcome.zul]
【afterUpdate 】[127.0.0.1] memory [6946] kb decrease [7] kb Page [/WEB-INF/content/welcome.zul]
【beforeUpdate】[127.0.0.1] memory [8579] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> north -> borderlayout -> window(indexWin) ->文件//WEB-INF/content/index.zul]
【afterUpdate 】[127.0.0.1] memory [8568] kb decrease [10] kb Page [//WEB-INF/content/index.zul]
【beforeUpdate】[127.0.0.1] memory [8525] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> window(welcomeWin) ->文件/WEB-INF/content/welcome.zul]
【afterUpdate 】[127.0.0.1] memory [8520] kb decrease [5] kb Page [/WEB-INF/content/welcome.zul]
【beforeUpdate】[127.0.0.1] memory [8477] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> north -> borderlayout -> window(indexWin) ->文件//WEB-INF/content/index.zul]
【afterUpdate 】[127.0.0.1] memory [8471] kb decrease [6] kb Page [//WEB-INF/content/index.zul]
【beforeUpdate】[127.0.0.1] memory [8428] kb button(btnTestMemory) cmd [onClick] Page [ -> button -> div -> window(welcomeWin) ->文件/WEB-INF/content/welcome.zul]
【afterUpdate 】[127.0.0.1] memory [8422] kb decrease [5] kb Page [/WEB-INF/content/welcome.zul]
- 资源文件.rar (603.8 KB)
- 下载次数: 41
发表评论
-
zkspring 3.0RC bug 修复
2010-11-19 15:46 1871zkspring 3.0RC bug 修复 ... -
【zk开发】使用Sessions.getCurrent().invalidate()时需要特别注意到问题
2010-11-15 16:25 2442Sessions.getCurrent().invali ... -
【zk开发】use和apply的区别
2010-11-15 14:03 4566use 使用一个组件类,该类必须是当前组件 ... -
【zk开发】java代码给组件添加客户端事件处理javascript
2010-11-10 10:49 1839/** *设置或删除widget的事件监听器,如 ... -
【zk开发】zk中的表单验证(优化版)
2010-11-10 10:41 2407/** * 验证表单 * <p> ... -
【zk开发】ZkUtils 1.2
2010-11-08 10:22 2796ZkUtils 是zk开发中的一些工具方法集合,将散落在 ... -
ZK 5.0.5 chm api文档
2010-11-03 10:11 5877ZK 5.0.5 chm api文档 文档在附件 ... -
ZK 5.0.5正式版发布
2010-11-02 18:24 1189ZK 5.0.5正式版发布 更新日志http: ... -
【zk开发】理解zk事件处理线程
2010-11-01 17:27 2293什么是事件处理线程(EventProcessingTh ... -
【zk开发】zkstudio安装及使用视屏
2010-10-29 16:58 2213安装视屏 http://docs.zkoss ... -
zk5.0.5可能最近两天发布
2010-10-29 13:13 1096zk5.0.5可能最近两天发布 zk5.0 ... -
【zk开发】zk注解的秘密
2010-10-28 14:26 4003The DataBinder that rea ... -
【zk开发】如何在页面中获得composer对象
2010-10-15 15:31 2644样例: <window id=&qu ... -
【zk开发】jQuery+zk完美客户端
2010-09-14 11:11 2586(function(window) { var lin ... -
【zk开发】zk5.0.4 datebox inplace模式的bug
2010-09-08 16:24 1627zk5.0.4 datebox inplace模式 ... -
使用ZK CE版开发商业软件
2010-09-07 15:50 2482仔细读一下内容 LGPL(GNU Lesser Gene ... -
【zk开发】zk的国际化
2010-09-02 16:22 3824【zk开发】zk的国际化 一,准备资源文件 ... -
zk5.0.4 chm版API
2010-09-01 12:37 1273zk5.0.4 chm版API -
挥起马鞭,升到zk5.0.4
2010-08-31 23:22 1442由于zk5.0.4测试版已发布公开测试,正式版应该很快出 ... -
ZK 5.0.4新特性
2010-08-31 16:38 3879ZK 5.0.4新特性 New Feature ...
相关推荐
这个"zk框架开发帮助文档"显然是为了指导开发者如何有效地利用Zookeeper进行系统设计和开发。 一、Zookeeper基本概念 1. 节点(Znode):Zookeeper数据存储的基本单元,类似于文件系统中的文件或目录。每个节点都有...
4. 监控告警:实时监控Zookeeper的运行状态,如CPU、内存使用情况,以及异常事件告警,确保服务稳定运行。 5. 日志查看:提供查看和下载Zookeeper服务器日志的功能,便于问题排查。 在源代码中,我们可以通过以下几...
Go-zk-sniffer就是这样一款基于Golang开发的工具,专门用于嗅探和解析ZooKeeper的数据包,为开发者提供了一种深入洞察ZooKeeper网络通信的途径。 首先,我们来了解下ZooKeeper的主要功能。ZooKeeper是一个分布式的...
10. **性能优化**:ZK通过批量操作、数据压缩、内存数据缓存等手段提高性能,以应对大规模的并发请求。 深入研究ZK 3.0.7的源代码,不仅可以理解其内部的工作原理,也可以为自定义扩展和优化提供基础,对于从事...
5. **CPU和内存使用率**: 监控Zookeeper服务器的资源消耗,预防资源耗尽导致的服务中断。 6. **网络延迟和吞吐量**: 评估网络状况,避免网络瓶颈影响服务性能。 7. **日志和错误分析**: 通过日志发现潜在问题,...
在游戏开发和调试中,内存遍历工具往往被用来检测游戏状态、寻找作弊码或优化游戏性能。它们可以搜索内存中特定数值,比如玩家的生命值、分数或其他关键属性,以便于理解和调整游戏逻辑。对于开发者来说,这样的工具...
ZK-11语音识别模块是一款专为实现语音控制和交互而设计的硬件设备,通常用于智能家居、智能车载系统、安防监控等应用场景。其核心功能是将人类的语音命令转化为机器可理解的数字信号,从而实现对其他设备的控制或...
同时,这个版本还对内存管理和数据存储进行了优化,降低了内存占用,提升了读写速度。此外,安全方面也得到了加强,支持了SASL(Simple Authentication and Security Layer)协议,提高了系统的安全性。 最后,...
在Java开发中,分布式锁的应用广泛,尤其是在微服务架构中,当服务间的通信可能导致对同一资源的并发访问时,分布式锁能确保操作的原子性和一致性。 **Redis与Zookeeper分布式锁对比** 1. **Redis分布式锁** - **...
5. **安全性**:Rust 语言的特性使得 `zk-shell-rs` 在处理敏感的 ZooKeeper 操作时具有良好的内存管理和安全性,减少了潜在的内存泄漏和数据损坏风险。 6. **性能优化**:Rust 的高性能特性使得 `zk-shell-rs` ...
5. JVM调优:包括堆内存分配、GC算法、性能监控、内存泄漏排查等。 【Redis面试知识点】 1. Redis概述:Redis是一个开源的键值存储系统,常用于高速数据缓存、消息队列等场景。 2. 数据类型:Redis支持字符串、...
6. 性能监控:显示服务器的CPU、内存、网络等资源使用情况,帮助评估系统的健康状况和性能瓶颈。 7. 配置管理:允许用户查看和修改Zookeeper服务器的配置,这对于优化集群配置和解决配置错误至关重要。 8. 安全性...
9. **监控和日志**:使用Prometheus、Grafana进行性能监控,ELK (Elasticsearch, Logstash, Kibana) 或Graylog进行日志收集和分析。 10. **测试框架**:JUnit、Selenium等,用于编写和执行单元测试和集成测试,保证...
6. 监控功能:可以实时监控Zookeeper服务器的状态,包括连接数、会话超时、CPU和内存使用情况等。 7. 事件通知:当Zookeeper中的节点发生变化时,Zkui能够及时通知用户,帮助快速定位问题。 8. 快照管理:允许用户...
5、精美的而快速的界面处理技术、最少内存使用、让用户可以开发精美工控画面而实现高效工控软件。 6、作为软硬件生产商、软硬件完美结合、雄厚的技术实力、让用户只专注于工控系统而不是软件本身。 7、内置数据...
4. **可视化**:通过图表展示Zookeeper集群的健康状况,例如节点数量、内存使用情况、会话状态等,帮助管理员实时监控集群状态。 5. **权限管理**:支持配置权限,对不同用户或角色赋予不同的访问权限,增强系统...
8. **实时监控**:提供实时的Zookeeper服务器指标监控,包括CPU、内存使用情况,以及网络IO等,有助于及时发现和处理性能瓶颈。 使用zkweb这样的工具,运维人员可以更高效地进行故障排查、配置调整和性能优化,提高...
Mycat关键特性 关键特性 支持SQL92标准 ...支持zookeeper协调主从切换、zk序列、配置zk化(1.6) 支持库内分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
Exporter是Prometheus社区开发的一系列工具,它们能够将非Prometheus格式的度量数据转换成Prometheus可以理解的格式。本文主要讨论了如何部署几种常见的Exporter,包括`node_exporter`、`redis_exporter`、`mysql_...