川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

性能测试—Tomcat服务器监控

作者:川石学院 日期:2021-06-17 16:15:13 点击数:

  做性能测试的小伙伴应该都知道,Tomcat服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。

  Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户的场合下被普遍使用,是开发和调试JSP程序的首选。所以在性能测试过程需要经常监控Tomcat服务器。

性能测试—Tomcat服务器监控(图1)

  通常监控Tomcat服务器的方法有以下三种:

  第一:使用Tomcat自带的status页进行监控。

  第二:使用Java管理扩展监测工具Jconsole进行监控。

  第三:使用Probe进行监控。

  在本小节将对这三种监控方法进行详细的介绍。

  一、status页监控

  Status页对Tomcat监控的步骤如下:

  •   步骤1:修改配置文件tomcat-users(该文件在Tomcat安装程序根目录中的conf文件夹中),添加一个admin设置权限,在中添加的内容如下:

    <role rolename="admin-gui"/>

      <user username="admin" password="1234" roles="manager-gui"/>

  •   步骤2:修改完成后,重启Tomcat服务器,在浏览器中输入URL(http://localhost:8080/),如果是远程访问,访问的URL为http://IP:8080,如图10-4所示。  

性能测试—Tomcat服务器监控(图2)

  图10-4 Status Management页面

  •   在Status Management页面,提供几种监控Tomcat的内容,主要包括Server status和Host Manager两个方面的内容。

  •   Server status主要是显示服务器相关的信息,主要包括:Server Information、JVM和接连器相关的内容。

  •   Server Information主要是显示了服务器配置的相关信息,如图10-5所示。

  

性能测试—Tomcat服务器监控(图3)

  图10-5 Server Information内容

  JVM部分主要显示了JVM的详细信息,包括JVM总的大小、剩余大小等相关信息,并统计了每个代所消耗内存的情况,当然如果需要看懂这些值,就必须和JVM设置相关的参数对照的来看,这样才可以更好的理解,当然如果要看详细的每个时间这个值的变化情况,这里是无法给到的。  

性能测试—Tomcat服务器监控(图4)

  图10-6 JVM信息

  •   Free memory: 30.38 MB Total memory: 65.60 MB Max memory: 506.31 MB

  •   Free memory:空闲内存大小;

  •   Total memory:总内存大小;

  •   Max mermory:最大内存大小;

  接连器在这里其实有两种:ajp和http两种连接器,我们一般看到多的是http的连接器,因为一般来说都是通过HTTP来发送请求的。HTTP连接器的内容如图10-7所示。  

性能测试—Tomcat服务器监控(图5)

  图10-7 HTTP连接器信息

  •   Max threads: 300 Current thread count: 10 Current thread busy: 1 Keep alive sockets count: 1

  •   Max processing time: 2357 ms Processing time: 8.778 s Request count: 155 Error count: 2 Bytes received: 0.00 MB Bytes sent: 2.03 MB

  •   Max threads:最大线程数;

  •   Min spare threads:最小空闲线程数;

  •   Max spare threads:最大空闲线程数;

  •   Current thread count:最近运行的线程数;

  •   thread busy:正在运行的线程数;

  •   Max processing time:最大CPU时间;

  •   Processing time:CPU消耗总时间;

  •   Request count:请求总数;

  •   Error count:错误的请求数;

  •   Bytes received:接收字节数;

  •   Bytes sent:发送字节数;

  关于请求阶段的有以下几种情况:

  •   P:表示正准备发送的请求;

  •   S:表示请求正在服务器端处理;

  •   F:表示已经完成的请求;

  •   R:表示即将发送的请求;

  •   K:表示当前活动的请求;

  二、Jconsole监控

  JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台,标准版(Java SE平台)6,JConsole的已经更新到目前的外观,类似于Windows和GNOME桌面(其他平台,将目前标准的Java图形的外观和感觉),在这个文件中提出的屏幕截图是从Windows XP上运行的接口的一个实例。

  Jconsole是一个可执行文件,在Java根目录下有一个bin文件,该文件下可以找到jconsole文件,单击可直接运行该程序,如果将该jconsole的路径设置为环境变量,那么可以直接在开始菜单运行命令中直接键jconsole命令,来运行jconsole程序,如果未设置为环境变量,那么则需要写全路径。

  启动JConsole程序的方式有两种:一种是带参数的启动;另外一种是不带参数启动。

  带参数启动JConsole启动时,又分有两种情况:一种是监控本地进和;另一种是远程监控;

  本地监控的命令格式如下:

  •   JConsole processID

  •   processID是指应用程序的进程ID(PID),可以使用以下方式确定一个应用程序的PID:

  •   在UNIX或Linux系统,可以使用 ps命令找到正在运行的Java实例的PID;

  •   在Windows系统上,可以使用任务管理器,找到java或者javaw进程的PID;

  例如:如果监控JConsole程序,JConsole的进程号为5604,那么可以用下面的命令启动JConsole:

  •   JConsole 5604

  远程监控的命令格式如下:

  •   JConsole 主机名:portNum

  主机名是需要监听的主机,portNum是启动Java虚拟机时指定的JMX代理的端口号。

  注意:使用JConsole监视本地应用程序在开发和创建原型是非常有用的,但不推荐用于生产环境,因为Jconsole本身也消耗大量的系统资源。

  执行Jconsole程序时,不带任何参数命令,会弹出Jconsole新建链接对话框,如图10-6所示。  

性能测试—Tomcat服务器监控(图6)

  图10-6 Jconsole新建连接

  Jconsole有两种监控方式:本地进程监控和远程监控。

  •   选择本地进程监控,在下面的列表框中会列出与JConsole程序相同用户的进程,选择其中一个进程,单击连接按钮,即可以进行监控的主界面。

  •   选择远程监控,需要的内容包括。主机名和JMX代理的端口号,以及访问服务器的用户名和密码。

  当连接成功后,会弹出监控界面,如图10-7所示。  

性能测试—Tomcat服务器监控(图7)

  图10-7 监控主界面

  监控的内容主要包括六个方面的内容:概述、内存、线程、类、VM摘要和MBean。

  概要信息

  概要信息监控界面主要包括堆内存使用情况、线程数、Java VM中加载类和CPU使用情况。选中各视图可以切换监控的时间片段,同时也可以将视图中的数据保存在一个逗号分隔(CSV)文件中。

  内存信息

  内存监控信息主要提供了内存消耗和内存池的信息,如图10-8所示。  

性能测试—Tomcat服务器监控(图8)

  图10-8 内存监控信息

  内存监控信息主要监控了两类内存消耗的信息:堆和非堆内存,这两种内存也是Java虚拟机管理的两种内存,这两者都是Java虚拟机启动时创建的。

  •   堆内存是运行时数据区域,Java VM的所有类实例和数组分配内存,可能是固定或可变大小的堆。

  •   非堆内存包括在所有线程和Java虚拟机内部处理或优化所需的共享的方法。它存储了类的结构、运行常量池、字段和方法数据,以及方法和构造函数的代码,方法区在逻辑上是堆的一部分,看具体实现的方式。根据实现方式的不同,Java虚拟机可能不进行垃圾收集或压缩。与堆内存一样,方法区域可能是一个固定或可变大小,方法区的内存不需要是连续的。

  除了方法区,Java虚拟机可能需要进行内部处理或优化,这也属于非堆内存的内存。例如,实时(JIT)编译器需要内存用于存储从Java虚拟机的高性能的代码翻译的机器码。

  Jconsole提供的监控的堆和非堆的内存主要包括以下几类:

  •   Eden Space内存池:大多数对象初始化时分配的内存池;

  •   Survivor Space内存池:这个内存池包含的对象是回收Eden Space内存池后所幸存的对象;

  •   Tenured Gen内存池:这个内存池包含的对象是在Survivor Space内存池中已经存在一段时间的对象;

  •   Code Cache内存池:包括HotSpot Java VM的代码缓存和编译、存储代码所消耗的内存;

  •   Perm Gen[shared-rw]内存池:Perm Gen内存池中读写的区域;

  •   Perm Gen[shared-ro]内存池:Perm Gen内存池中只读的区域;

  •   Perm Gen内存池:该内存池包括虚拟机本身反射的数据,如类和方法,Java虚拟机在运行时会共享这些类数据区域,共享的区域有只读和读写两种方式。

  在图表下拉列表框中可以选择不同内存池进行监控,并获得当前内存池所消耗的内存信息,此外右下角显示了堆和非堆的图标,切换显示的图表,内存池图表显示的内容也随着切换,如果显示为红色,那说明使用的内存超过内存的阀值。

  内存池和内存管理器是Java虚拟机的内存系统的关键环节。

  一个内存池表示Java虚拟机管理的内存区域。Java虚拟机至少有一个内存池,它可能在执行过程中创建或删除内存池,一个内存池可以属于堆或非堆内存。

  一个内存管理器管理一个或多个内存池,垃圾收集器是一个负责回收不可达的对象使用内存的内存管理器,Java虚拟机可能有一个或更多的内存管理器,在执行过程中,它可以添加或删除内存管理器,一个内存池可以由一个以上的内存管理器进行管理。

  “详细信息”框中显示了内存使用的详细信息,主要包括以下信息:

  1.   已使用:当前使用的内存数,包括已经使用的、可获得或未获得的内存;

  2.   分配:分配的内存必须保证Java虚拟机所需要的使用量,提交的内存可能会随时间的改变而改变,Java虚拟机可能会释放系统内存,分配的内存可能会少于最初启动时分配的内存量,分配的内存大于或等于需要使用的内存量。

  3.   最大值:内存管理中可用的最大内存,该值是变化的或不确定的,如果Java虚拟机使用的内存在不断的增长并且大于所分配的内存量,那么分配内存将失败。

  4.   GC时间:累积垃圾收集的时间和总调用的时间,它可能包含多行,其中每行代表一个垃圾收集器算法在Java虚拟机中所消耗的时间。

  垃圾收集(GC Garbage Collect)是Java虚拟机如何释放不再被引用的对象所占用的内存的机制,它通常认为的对象,有当前活动的“活着”的对象和无法引用或不获得“死”对象,垃圾收集是由释放“死”对象所占用内存的过程,垃圾收集的算法和参数对性能有很大的影响。

  Java HotSpot虚拟机的垃圾收集器使用代GC,代GC的优势大多数都符合以下的概括:

  •   它们创建一些短暂一生的对象,如迭代和局部变量;

  •   它们创建一些长生命的对象,如高层次的持久对象;

  代GC分为几代,并给每个指定一个或多个内存池,当一代使用了分配的内存,虚拟机上执行一个局部的GC(也叫minor collection),内存池回收死对象使用的内存,这部分的GC速度通常远远优于一个完整的GC。

  Java HotSpot虚拟机定义了两代:年轻代(有时也被称为“托儿所”)和年老代,年轻代包括一个“Eden space”和两个“survivor spaces”,最初,VM将所有的对象在“Eden space”内存池中,并且大多数对象“死”在那里,当它执行了一次局部GC(minor GC),VM将剩余的对象从“Eden space”转移到“survivor spaces”,虚拟长生存时间的对象移动到年老代的“tenured”空间,当年老代填满了,将是一个完整的GC,一个完整的GC往往会很慢,因为它涉及到所有存活的对象,永久代包含虚拟机所有本身数据的反射,如类和方法。

  如果垃圾收集器出现瓶颈,那么可以通过自定义代大小来提高性能。

  线程信息

  线程的监控信息如图10-9所示。  

性能测试—Tomcat服务器监控(图9)

  图10-9 线程监控信息

  在左下角“线程”列表中显示了所有活动的线程,如果需要查找指定的线程,可以在“过滤器”字段中输入待查找的线程,选中某个线程,右边文本框即会显示出当前线程的名称、状态和堆栈跟踪信息。

  上面的线程数目视图中动态的显示当前活动线程数,主要包括两部分内容:当前活动线程数和峰值线程数。

  线程监控视图中还提供了一个检测死锁线程的功能,单击【检测到死锁】按钮,如果存在任何线程对象监视器出现死锁情况,则会显示出该死锁线程的ID号,并且会显示出当前线程的相关信息。

  在MBean选项卡中可以监视Java虚拟机线程信息的所有属性和操作。

  类信息

  类的监控信息如图10-10所示。  

性能测试—Tomcat服务器监控(图10)

  图10-10 类监控信息

  已装入类的数目视图中显示了已装入类的总数和当前加载的类,其实红色表示已装入类的总数,蓝线当前加载的类。详细信息中显示了当前已装入的类、已装入类的总数和已卸载类的总数。

  VM摘要信息

  VM摘要的监控信息如图10-11所示。  

性能测试—Tomcat服务器监控(图11)

  图10-11 VM摘要信息

  在VM摘要信息中主要包括五方面的信息:摘要信息、线程和类信息、内存信息、操作系统信息和其它信息。

  摘要部分的信息主要包括以下信息:

  •   连接名称:连接监控时的进程PID信息;

  •   运行时间:开始以来Java虚拟机运行的时间总额;

  •   处理CPU时间:Java VM的开始,消耗的CPU时间总量;

  •   编译总时间:累计时间花费在JIT编译所花费的时间;

  线程和类信息主要包括以下信息:

  •   活动线程:当前活动的线程;

  •   峰值:最大线程数;

  •   守护线程:即运行在后台的线程;

  •   已启动的线程总数:运行到目前为止共启动的线程数;

  •   当前类已装入:当前正在运行过程中已装载类的总数;

  •   已装入类的总数:运行到目前为止所装载类的总数;

  •   已卸载类的总数:运行到目前为止已卸载类的总数;

  内存信息主要包括以下信息:

  •   当前堆大小:当前堆分配的内存空间;

  •   分配的内存:当前已分配的内存大小;

  •   堆大小的最大值:堆分配内存的最大值;

  •   暂挂结束操作:当前暂时挂起结束的对象;

  •   垃圾收集器:垃圾收集器描述了收集器的名称、收集器收集的内存数量和收集这些内存所消费的时间;

  操作系统信息主要包括操作系统名、体系结构、分配的虚拟内存、物理内存总量、可用物理内存、交换空间总量和可用交换空间。

  其它信息主要包括以下信息:

  •   VM参数:显示通过应用程序传送给Java虚拟机的参数,这些参数不包括的主要方法的参数;

  •   类路径:由系统类加载器用于搜索类文件的类路径;

  •   库路径:加载库时要搜索的路径列表;

  •   引导类路径:引导类加载器搜索类文件的路径列表;

  MBean信息

  MBeans选项卡显示MBean服务器所注册的MBeans的类,MBeans选项卡允许访问平台MXBean服务器,此外,还可以监控和管理应用程序的MBean,MBean信息如图10-12所示。  

性能测试—Tomcat服务器监控(图12)

  图10-12 MBean信息

  左侧显示了当前所以运行的MBean,当选中MBean树中某个MBean时,右侧会显示当前被选中MBean的MBeanInfo和描述符信息,在下面会显示当前MBean的相关属性、操作和通知信息。

  MBean属性

  在MBean树中选择一个MBean,单击“属性”节点,将显示MBean的所有属性,以Memory为例,如图10-13所示。  

性能测试—Tomcat服务器监控(图13)

  图10-13 Memory属性

  选中属性下面的单个属性,在右侧会显示出当前属性的详细信息,如图10-14所示。  

性能测试—Tomcat服务器监控(图14)

  图10-14 属性的详细信息

  单击属性值(即右侧黑体字),可以展开详细的属性值信息, HeapMemoryUsage属性展开后的值,如图10-15所示。  

性能测试—Tomcat服务器监控(图15)

  图10-15 HeapMemoryUsage详细信息

  双击属性值,可以对这些显示的值进行修改,有的属性是以图表的方式显示,如图10-16显示的是Threading中的CurrentThreadUserTime属性值。  

性能测试—Tomcat服务器监控(图16)

  图10-16 图表方式显示属性值

  Mbean操作

  在MBean树中选择一个MBean,单击“操作”节点,将显示MBean的所有相关操作,以Threading为例,如图10-17所示。  

性能测试—Tomcat服务器监控(图17)

  图10-17 Threading操作

  单击操作调用中的按钮,可以调用这些方法,单击某种方法可以显示当前方法的详细信息,如图10-18所示。  

性能测试—Tomcat服务器监控(图18)

  图10-18 方法的详细信息

  Mbean通知

  在MBean树中选择一个MBean,单击“通知”节点,选择某个通知,右侧将显示该通知的详细信息,以Memory为例,如图10-19所示。 

性能测试—Tomcat服务器监控(图19)

  图10-19 通知详细信息

  三、probe监控

  这是一款 Tomcat 管理和监控工具,前身是 Lambda Probe。由于 Lambda Probe 2006不再更新,所以 PSI Probe 算是对其的一个 Fork 版本并一直更新至今。

  psi-probe是在相同的开源许可证(GPLV2)下分发的社区驱动的 Lambda Probe ,psi-probe的前身是 Lambda Probe,由于Lambda Probe 2006之后不再更新,所以psi-probe算是对其的一个 Fork版本并一直更新至今。它的目的是替换和扩展 Tomcat 管理器,使得管理和监视 Apache Tomcat 的实例更容易。与许多其他服务器监控工具不同,psi-probe不需要对现有应用程序进行任何更改。它通过一个Web可访问的接口提供它的所有特性,只需将它部署到服务器即可。

  使用psi-probe监控的步骤如下:

  1. 安装probe

  目前我们一般都是安装psi-probe的版本,将下载的安装包解压缩,放进webapps目录。

  2. 配置用户与角色

  使用probe监控工具时,会提醒输入登录的用户信息,该登录的用户信息角色必须为manage-gui。在tomcat-users.xml文件中配置即可。具体的代码如下:

  conf/tomcat-users.xml文件中添加以下代码

  •   //设置角色名

  •   //设置用户

  •   3. 重启Tomcat服务器

  •   tomcat停止

  •   ./usr/local/apache-tomcat-8.5.31/bin/shutdown.sh

  •   tomcat启动

  •   ./usr/local/apache-tomcat-8.5.31/bin/startup.sh

  •   4. 进入监控界面

  •   http://ip:port/probe

  例如

  •   http://192.168.40.133:8080/probe/

  监控界面的信息如图10-20所示。  

性能测试—Tomcat服务器监控(图20)

  图10-20 probe监控界面

  监控界面的内容主要包括:Applications、Data Sources、Deployment、Logs、Threads、Cluster、System、 Connectors、Certificates和Quick check。

  1、Applications

  Applications标签页的内容如图10-21所示。  

性能测试—Tomcat服务器监控(图21)

  图10-20 Applications标签页

  applications中主要显示所有应用程序相关的情况,表示服务器上运行的应用程序的情况。

  •   STATUS列:表示应用程序运行的状态。

  •   REQ.列:表示应用程序所接受到的HTTP请求数。

  •   sess.列:表示发送请求使用到的session数。

  •   JSP列:表示发布程序所有JSP文件。

  Application statistics显示所有应用程序的统计信息:所有应用程序的请求数、每个应用程序的请求数、所有应用程序响应的时间(ms)、每个应用程序平均响应时间(ms),如图10-22所示。  

性能测试—Tomcat服务器监控(图22)

  图10-22 Application statistics

  2、 Data Sources

  表示所配置的数据源,如果没有配置就不会显示这个内容。

  3、 Deployment

  可以在当前页面下上传jar包到服务器端,对服务器进行更新程序。

  4、 Logs

  该标签页主要是显示了日志的相关信息,如图10-23所示。  

性能测试—Tomcat服务器监控(图23)

  图10-23 Logs信息

  这里显示日志文件名、日志大小、日志更新时间、以及涉及到的类的信息。

  单击日志文件链接可以查看日志文件信息,这个日志信息内容就是Tomcat目录下的日志信息,一样的,日志内容如下:

  •   at java.lang.reflect.Method.invoke(Method.java:498)

  •   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)

  •   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)

  •   26-Apr-2020 22:05:28.532 信息 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]

  •   26-Apr-2020 22:05:28.532 信息 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]

  •   26-Apr-2020 22:05:28.532 信息 [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]

  •   26-Apr-2020 22:05:29.062 警告 [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [opencarrun] appears to have started a thread named [Thread-3] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

  •   java.lang.Thread.sleep(Native Method)

  •   org.apache.log4j.net.SocketAppender$Connector.run(SocketAppender.java:440)

  •   26-Apr-2020 22:05:29.089 信息 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]

  •   26-Apr-2020 22:05:29.089 信息 [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]

  •   26-Apr-2020 22:05:29.090 信息 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]

  •   26-Apr-2020 22:05:29.090 信息 [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

  当然要看的懂这个日志信息,就必须了解这些JAVA类,否则可能很难看明白。

  如果有需要也可以将这个日志文件下载下来。

  5、 Threads

  线程标签页主要显示服务器线程池的信息,如图10-24所示。  

性能测试—Tomcat服务器监控(图24)

  图10-24 线程信息

  单击左上角的“Threads Pools”链接,会显示线程池相关的参数信息,如图10-25所示。  

性能测试—Tomcat服务器监控(图25)

  图10-25 线程池

  这个界面显示了当前线程数、当前正在忙的线程、最大线程数、最大空闲线程数和最小空闲线程数。关于线程的参数在server.xml文件中可以来设置。

  6、 Cluster

  Cluster标签页主要是显示集群相关的信息,

  7、 System

  System主要是显示系统相关的信息,如图10-26所示。 

性能测试—Tomcat服务器监控(图26)

  图10-26 系统相关信息

  Memory utilization这里显示了主的内存和内存使用情况,单击“Advise Garbage Collection” 选项可以对内存进行回收。下面是服务器操作系统相关的信息。

  单击右侧Memory Utilization选项,会显示出所有关于内存使用的信息,包括HEAP(堆)和NON_HEAP(非堆)的信息。如图10-27所示。  

性能测试—Tomcat服务器监控(图27)

  图10-27 堆与非堆内存使用

  如果要看懂图里面的信息,特别是关于HEAP(堆)和NON_HEAP(非堆),很多读者可能理解起来比较晕。所以必须对JVM有着深入的理解,关于JVM的内容在10.4章节中会有详细的介绍。上面显示了堆中三代使用内存的情况以及相关的参数信息,但是在现在的最新版的JVM并没有分成三代,而是将持久代换成了元空间。

  下面的则显示出了所有代所消耗内存的情况。这个消耗的内存正常一定是锯形状,就是一高一低的,因为GC会在后面回收内存。所以看到的就是一下多一下少的。关于内存使用是我们监控Tomcat的一个很重要数据。所以我们必须要看的懂这些数据和这些曲线图。

  8、 Connectors

  Connectors标签页主要显示了连接器相关的信息,如图10-28所示。  

性能测试—Tomcat服务器监控(图28)

  图10-28 Connectors连接器

  这里显示了所有连接器处理请求的情况:每秒钟处理的请求数、讲求的响应时间、请求的字节数等。下面显示还是了我们客户端访问服务器的相关资源信息。

  9、 Certificates

  Certificates标签页显示了证书相关的信息。

  10、 Quick check

  Quick check标签页显示了检查服务器状态的一些信息。

       主要包括以下信息:

  •   Datasource test PASSED (Max usage 0%)

  •   Memory test PASSED

  •   File creation test: PASSED

  •   Application test: PASSED

  本章主要介绍了关于“性能测试—Tomcat服务器监控”的内容,大家喜欢的话记得每天来这里和小编一起学习涨薪技能哦。(笔芯)

  附:川石信息全国校区最新开班时间,课程资料获取13691729932(微信同号)。  

性能测试—Tomcat服务器监控(图29)


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-06-17 16:15:13
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-06-17 16:15:13
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-06-17 16:15:13
  • 建筑工程专业朱同学成功转行为软件测试人!2021-06-17 16:15:13
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-06-17 16:15:13
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-06-17 16:15:13
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-06-17 16:15:13
  • 文科生转行软件测试照样拿下高薪15K!2021-06-17 16:15:13
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-06-17 16:15:13
  • 毕业1年,迷茫的他最终选择转行软件测试2021-06-17 16:15:13