本版本为1.52版。如果有问题,请写信至:gm365365@sina.com

 

 

Q1-1 什么是JettyProbe ? 它有何作用,它的官网是什么?

 

JettyProbe是Jetty的监测软件,即Jetty Probe。它实时监测Jetty进程内部的各种重要数据,把基于Jetty运行的网站的内存、线程数、CPU、用户连接数、用户请求数、流量、Session数、异步Servlet执行情况,以图形曲线的方式显示出来,统计一些重要数据,对网站的健康状况作出诊断,并预测网站是否要宕(在网站快要宕时,重启Jetty,确保网站不间断对外服务)。它也可以作为发单方验收网站是否开发得稳定的工具软件,现在有不少IT公司开发出的网站连20年前的7*24小时连续运行的IT标准都达不到,只能说那只是个演示版。

 

JettyProbe的官网是http://www.gm365.com,关于JettyProbe的各种下载和最新动态都可以在这个网站找到。

 

JettyProbe的安装、启动、运行界面如下:

 

        

 

 

       

                      

 

Q1-2 JettyProbe对Jetty公司发布的标准的Jetty也能监测?

 

不能,JettyProbe不能监测标准的Jetty。它只能监测我公司改写过的Jetty!这些经过我公司适当改写的支持JettyProbe的Jetty的各种版本都放在其官网www.gm365.com上,您可以下载。

 

 

Q1-3 改写了,增加了监测功能,是否对Jetty的资源、性能有影响?

 

我公司改写的Jetty,仅仅只是增加了一些“记数”方面的代码,未改变Jetty的任何逻辑。

 

改写后的Jetty由于监测增加的开销是很小很小的。仅仅只是增加了一个线程;并且数据采样是内存运算,大约每隔20分钟做一次,对CPU几乎没有增加消耗;内存里只保留512个点的数据,内存增加也只有几十K。

 

 

Q1-4 改写后的Jetty是否增加了不稳定性?

 

改动部分是极稳定的,绝对不会引入一点不稳定性。我公司在服务器程序的稳定性方面是极富经验和水平的;我公司的名字是“上海不宕”,如果发现改写后的Jetty增加了一点不稳定性,我公司将立即改名!

 

 

Q1-5 看到了改写版Jetty的所有源代码了,但是JettyProbe的PC客户端只有一个.exe安装文件,没有源代码啊?

 

JettyProbe的PC客户端是不开源的,Jetty改写版(服务器端)开源是为了遵守协议。

我公司认为开源的人是伟大的,同时我公司也比较认同比尔盖茨的观点。据传,我们崇拜的比尔盖茨曾说,开源的那些家伙是一帮傻鸟。

 

 

Q1-6 从官网下载了改写版Jetty的源代码,想看你公司对Jetty做了哪些改写以支持JettyProbe?对哪些.java文件做了修改?

 

我公司对Jetty的修改代码全部以“//----------by gm365-----------”行开始,以“//----------------------”行结束,因此您可以打开.java文件,查找“gm365”可以容易地找到修改部分。

 

修改过的全部的.java文件如下:

 

org\eclipse\jetty\server\AbstractNetworkConnector.java

org\eclipse\jetty\server\NetworkConnector.java

org\eclipse\jetty\server\HttpConfiguration.java

org\eclipse\jetty\server\Server.java

org\eclipse\jetty\server\ServerConnector.java

org\eclipse\jetty\server\handler\ContextHandler.java

org\eclipse\jetty\io\ChannelEndPoint.java (Jetty9)

org\eclipse\jetty\io\ServerChannelEndPoint.java (Jetty10、Jetty11)

 

增加了一个目录gm365-probe,这个目录下所有.java文件都是我公司编写的。

 

 

Q1-7 你公司修改的Jetty在配置打包方面有哪些变动?

 

只有2点变动或注意:

 

1. 在jetty-base目录下增加etc/login.properties,里面设置JettyProbe登陆的用户名和密码;

2. gm365-probe目录下的.class放在lib/jetty-server-9.4.35.v20201120.jar包里。

 

 

Q1-8 我把我的Jetty换成你公司改写的Jetty,却启动不起来,这是为何?我Jetty玩得很转的。

 

只有一个原因:你的服务器上的JDK版本低于jdk-8u72。

官网上的我公司的Jetty改写版都是采用jdk-8u72编译的。

由于JDK7已无法在Java官网下载了,请您把服务器上的JRE升级到jdk-8u72或以上。

 

 

Q1-9 JettyProbe上显示“外来”线程数,何为外来线程?

 

在您的项目servlet或jsp里有“Thread t=new Thread(); t.start();”这样的类似代码,启动了一个线程,这个线程在JettyProbe看来就是外来线程。

JettyProbe把servlet或jsp里在浏览器用户访问时动态启动的线程定义为外来线程。外来线程是危险的,外来线程数可能因为浏览器用户数大增或锁等待时间长而大增,从而使Jetty宕掉。您知道,当一个进程里线程数超过1000时,这个进程就危险了。

 

不建议在servlet或jsp里启动线程。即使要启动线程,也要保证外来线程数不因浏览器用户猛增而增长,例如,启动的线程是static的。

 

 

Q1-10 如何在JettyProbe里查看死锁线程信息?我想知道Jetty里哪些线程发生了死锁。

 

用鼠标点JettyProbe里的死锁或外来线程监测线,右击鼠标,会弹出一个菜单,上面有“查看死锁线程信息”菜单项,用鼠标点它。如下图所示:

 

    

 

 

Q1-11 如何在精确的点弹出菜单?用鼠标有点费劲。

 

用鼠标点在那个点附近,出现一根白线,按左右箭头键,将这根白线移到那个点上,然后按上箭头键,就弹出了菜单,该菜单对应那个点的情况。

 

 

Q1-12 当Jetty以内嵌方式启动时(自己不拥有进程,而是在别的进程内启动,例如,SpringBoot进程内启动Jetty),JettyProbe监测到的内存、线程、CPU等数据是整个进程的还是仅仅只是Jetty部分的?

 

在这种情况下,JettyProbe监测到的内存、CPU、总线程数、外来线程数、死锁线程数都是整个进程的;但空闲线程数是Jetty内各个Executor的空闲线程数的总和,进程内Jetty以外的Executor和线程池里的空闲线程是监测不到的。

 

 

Q1-13 我在www.gm365.com下载JettyProbe,下载速度好慢,只有110K/s,感觉回到了拨号上网时代。

 

2年前,gm365网站的服务器硬件坏了,作为应急办法,在某共有云租了一个云虚拟主机,出口只有1M。

 

请耐心点,带宽将来会有的。