1
回答
tomcat下监控web项目
终于搞明白,存储TCO原来是这样算的>>>   

@红薯 你好,想跟你请教个问题:

tomcat下怎么监控每个web项目的cpu,内存的使用情况?我在tomcat下使用Jmx只能检测到session相关的情况以及tomcat使用cpu的情况,不知道每个项目的cpu怎么监控?后来看了javamelody的源码,他监控的也是tomcat的内存使用情况?或者我自己写MBean,怎么被tomcat管理和与项目关联呢?

举报
乔康007
发帖于5年前 1回/866阅
共有1个答案 最后回答: 5年前

自定义MBean的问题,因为Tomcat启动的时候已经发布了一个MBeanServer了,你只需要在项目加个ServletContextListener,通过MBeanServerFactory的静态方法findMBeanServer(String agentId)获取MBeanServer然后注册你自己的MBean即可,那个参数用null。之前也试过自己打包甩到tomcat的lib下,然后改conf的web.xml加监听器也可以。

分项目监控好像本身没有这个机制,线程池是公用的。如果有这样的需要最好是多个tomcat前端用Apache或者Nginx做个转发。

--- 共有 7 条评论 ---
乔康007回复 @逝水fox : 奥,我再看看吧~~ 5年前 回复
逝水fox回复 @乔康007 : 考虑下,跑多个Tomcat,然后Nginx或者Apache根据路径或者域名做转发吧,这样你的问题变得简单很多。 5年前 回复
乔康007回复 @逝水fox : 这个业界就没有办法解决吗?那c有这方面的问题没? 5年前 回复
逝水fox回复 @乔康007 : 关键是线程不知道自己现在跑的是属于哪个应用,因为共享线程池是配置给Connector的,而不是某个具体的应用。内存也类似,Java内存只有按照内存块的功能性区分,像是是String的常量池中的一个对象你无法界定属于哪个应用使用的内存。特别的,只有ClassLoader是一个应用一个,但是这个最多也只能找出他加载的class只占永久代的很小的一部分不说明问题。 5年前 回复
乔康007线程不可以控制其内存和cpu使用情况吗? 5年前 回复
顶部