一、Petcat是什么?
Petcat是Tomcat的发行版(如同CentOS、Redhat是Linux的发行版一样),通过对Tomcat的改写,使之支持TomProbe监测(含义是:Tomcat不支持TomProbe监测,而Petcat支持TomProbe监测)。
Petcat(宠物猫)完全兼容Tomcat(汤姆猫),网站不做任何改动就可从Tomcat迁移到Petcat,Petcat的用法(安装、启动、开发)也与Tomcat完全一样。
Petcat完全遵守Tomcat的开源协议,Petcat也完全开源。
Petcat是Server程序,是Web Server(俗称中间件)。
二、Petcat的官网
Petcat的源代码和各种包发布的官网是:www.gm365.com。
在浏览器打开www.gm365.com网站,点击Petcat的下载链接位置,如下图所示:
进入Petcat下载界面后,根据您的需求,选择下载相应的包,如下图所示:
三、Petcat的安装和启动
Petcat与Tomcat的用法完全一样,因此如果你熟悉Tomcat的安装和启动,请忽略本节!
A. 在Windows下安装、启动Petcat(以安装Petcat 9为例)
1. 在Petcat官网(www.gm365.com)下载Petcat 9的zip包,如下图所示:
2.下载完成后得到apache-tomcat-9.0.58-tomprobe-K.zip,把它释放到D:\gm365目录下,如下图所示:
3. 用记事本打开bin目录下setclasspath.bat文件,设置JAVA_HOME参数(在此文件的上部位置,增加一行set JAVA_HOME=D:\jdk1.8.0_72,将JAVA_HOME设置成你计算机的JDK安装目录,保存!),如下图所示:
4.用鼠标双击bin目录下的startup.bat,就启动了Petcat,如下图所示:
5. 在本计算机的浏览器输入http://127.0.0.1:8080回车,出来了首页,Petcat确实启动成功了,如下图所示:
B. 在Linux下安装、启动Petcat(以CentOS下安装Petcat 9为例)
1. 在Petcat官网(www.gm365.com)下载Petcat 9的tar.gz包,如下图所示:
2. 把下载得到的apache-tomcat-9.0.58-tomprobe-K.tar.gz上传到/gm365目录下,如下图所示:
3. (站在gm365下)执行下面命令(以释放apache-tomcat-9.0.58-tomprobe-K.tar.gz):
tar -zxvf apache-tomcat-9.0.58-tomprobe-K.tar.gz
如下图所示:
4. 进入apache-tomcat-9.0.58-tomprobe-K目录的bin目录,执行(以授予.sh执行权限):
chmod a+x ./*.sh
如下图所示:
5. (确认站在bin目录下),执行(以启动Petcat):
./startup.sh
如下图所示:
6. 此时,Petcat可能并未启动完成,或者可能启动失败(端口已被占用),这时要进入logs目录下,执行:
tail -f catalina.out
就可以查看启动成功或失败或启动进行中,如下图所示:
7. 在确认Petcat成功启动后,在桌面远程计算机浏览器可打开Petcat首页。
四、功能介绍
作为Tomcat的发行版,很明显,Petcat继承了Tomcat的所有功能。但Petcat有哪些新增功能?Petcat新增功能是对Petcat运行的重要数据每隔一段时间做一次“快照”,并保存下来,形成历史曲线,以支持TomProbe的监测,从而诊断网站的健康状况,尤其是判断网站是否稳定、是否要宕,并帮助查找原因;另外还可以帮助查找消耗CPU的代码,以帮助网站开发者开发出高性能的网站。
具体地说,Petcat“快照”了哪些重要数据?这从TomProbe的监测界面可以直观地看出。
安装启动运行TomProbe(参加TomProbe相应的文档),对Petcat监测,就会出现如下界面:
具体地说,Petcat每隔一段时间“快照”了下列数据,并保存:
1. 总内存、在用内存;
2. 总CPU;
3. 前10名线程CPU;
4. Session数;
5. 总线程数、空闲线程数、外来线程数、死锁线程数;
6. 总上行流量、总下行流量;
7. 总请求数、总现存连接数、总新增连接数;
8. 每个Context的请求数、上行流量、下行流量;
9. 每个Connector的请求数、上行流量、下行流量;
10. 每个Executor的总线程数、空闲线程数;
11. 自启动的总连接数;
12. 自启动的总请求数;
13. 自启动的总上行流量;
14. 自启动的总下行流量;
15. Shutdown端口的连接数、上行流量、下行流量;
16. TomProbe客户端的个数。
另外,Petcat还有如下功能:
1. 接受TomProbe的“采点”请求后,立即动态“快照”一组数据发出;
2. 接受TomProbe的“gc采点”请求后,立即进行System.gc()垃圾回收,并动态“快照”一组数据发出;
3. 接受TomProbe的设置请求,保持并调整“快照”时间间隔;
4. 保存了Petcat的启动时间,以便TomProbe计算Petcat连续运行的天数;
5. 向TomProbe发去Petcat所在服务器的操作系统名称和版本;
6. 向TomProbe发去Petcat所在服务器的JVM规范版本和实现版本和名称;
7. 查看死锁线程的具体信息;
8. 查看前10名CPU线程的具体信息。
此外,Petcat还根据这些数据智能地判断Server的状态是“正常”还是“不正常”,并给出原因。
Petcat创新性地以总内存是否能稳定下来作为网站是否稳定的判断标准。内存监测在别的软件是司空见惯的,但它们只是显示数据而已,Petcat对它的认识有了质的提高,就像牛顿从苹果落地发现了万有引力一样。
Petcat创新性地引入了“外来线程”的概念,并对外来线程数进行“快照”并保存,正是外来线程数不可控导致了网站宕掉。
Petcat“快照”了前10名线程CPU并保存,这个功能可以帮助开发者很容易地查找出消耗CPU的代码,从而开发出高性能高负载的网站。
五、Petcat对Tomcat的源代码做了哪些增加和修改?这些改动对Tomcat的功能和性能有何影响?
首先,增加了一个目录org\apache\probe,这个目录下所有.java文件都是Petcat新增编写的;
其次,Petcat对Tomcat的修改代码全部以“//----------by gm365-----------”行开始,以“//----------------------”行结束(因此您可以打开.java文件,查找“gm365”可以容易地找到修改部分)。
修改过的全部的.java文件如下:
org\apache\catalina\connector\Connector.java
org\apache\catalina\connector\CoyoteAdapter.java
org\apache\catalina\core\StandardContext.java
org\apache\catalina\core\StandardHost.java
org\apache\catalina\core\StandardServer.java
org\apache\catalina\core\StandardService.java
org\apache\coyote\AbstractProtocol.java
org\apache\coyote\ProtocolHandler.java
org\apache\coyote\Response.java
org\apache\coyote\ajp\AbstractAjpProtocol.java
org\apache\coyote\ajp\AjpProcessor.java
org\apache\coyote\http11\AbstractHttp11JsseProtocol.java
org\apache\coyote\http11\AbstractHttp11Protocol.java
org\apache\coyote\http11\Http11InputBuffer.java
org\apache\coyote\http11\Http11OutputBuffer.java
org\apache\coyote\http11\Http11Processor.java
org\apache\tomcat\util\net\AbstractEndpoint.java
org\apache\tomcat\util\net\Acceptor.java (注:Tomcat8无此文件)
org\apache\tomcat\util\net\AprEndpoint.java
org\apache\tomcat\util\net\Nio2Endpoint.java
org\apache\tomcat\util\net\NioEndpoint.java
Petcat的这些改动并未影响Tomcat的原有的逻辑,因此保留了Tomcat原有的所有功能(且新增了监测功能)。
Petcat由于监测而增加的开销是很小的。仅仅只是增加了一个线程;并且数据采样是内存运算,大约每隔20分钟做一次,对CPU几乎没有增加消耗;内存里只保留512个点的数据,内存增加也只有几十K。
Petcat改动部分是极稳定的,绝对不会引入一点不稳定性。我公司在服务器程序的稳定性方面是极富经验和水平的;我公司的名字是“上海不宕”,如果发现改写后的Tomcat增加了一点不稳定性,我公司将立即改名!