• 0
  • 0
分享
  • 常用应用服务器:Tomcat的常用小技巧——软件测试圈
  • 曼倩诙谐 2022-03-22 10:54:09 字数 2369 阅读 813 收藏 0

  Tomcat是常用的应用服务器之一,主要用于开发和测试,也有少量用户用在生产系统中。本文总结了一些Tomcat的常见问题及处理技巧,以供参考。

  启动问题

  Windows下,在启动Tomcat时经常会出现启动窗口一闪而过,启动失败的情况,而日志文件中没有任何错误提示。

  此类问题多半是jvm参数或环境变量设置的问题,解决问题的关键是看到控制台输出的内容,但控制台一闪而过,不知道哪里出了问题。

  Tomcat默认安装后,bin目录下的startup.bat文件最下面是这样的。

  call "%EXECUTABLE%" start %CMD_LINE_ARGS%,这个命令执行时,会另启动一个窗口,将start改成run后,启动过程只有一个窗口,所有日志都在这一个窗口中输出了。

  做了这个修改之后,就可以开启一个cmd窗口,然后进入到bin目录下,直接输入starup.bat后,cmd窗口就会出现启动的日志输出了,有什么错误一目了然。如下图所示:

1.png

  Linux/unix/aix下的Tomcat启动,不会出现上面的问题,因为控制台日志直接写到了日志文件中,例如:/opt/tomcat/tomat/logs/catalina.out。

  日志问题

  Windows下,Tomcat的日志是输出在控制台上,这对于长期运行的生产系统来说是不合适的,因为很多日志都被覆盖,查找问题时也不方便。可以通过下面的方法将控制台日志输出到文件中

  直接修改bin下的startup.bat,将最后一行修改如下:

call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> catalina.%date:~0,10%.out

  按照上面的方法,Tomcat启动后,会在bin目录下生成2021-11-08.out之类的文件,文件名以当前日期取名,如果一天内启动多次,会以追加的方式写到同一文件中。

  内存问题

  Tomcat设置jvm内存大小,相信大家都会,但在实际运用时,经常会出现明明设置了内存参数,但是系统还是启动不起来,报内存溢出错误。

  Tomcat有很多设置jvm参数的方法,可以修改catalina.bat命令文件,也可以设置环境变量JAVA_OPTS,实际当中可能设置了多处,最终到底哪个生效了,自己都弄糊涂了。

  对于这种问题,只要做个简单的测试就清楚了。修改一下你设置的jvm参数,将参数设置的特殊一些,例如正常设置是-Xms256m –Xmx1024m –XX:MaxPermSize=256m。

  为了验证这个设置是否真正生效,可以这样设置:-Xms20480m -Xmx20480m -XX:MaxPermSize=256m(设置最小值超过物理内存)。

  如果Tomcat启动抛出内存设置过大的错误,则说明你设置的jvm参数生效了,否则说明Tomcat没有使用你设置的jvm参数,此时就需要检查相关文件或环境变量中是否有设置jvm,继续检查到底使用的是哪一个。

  对于Tomcat设置jvm参数这个问题,建议在catalina.bat(或catalina.sh)中进行设置,不要在环境变量中设置,因为环境变量是全局性的,可能会影响到其它Tomcat进程。

  Linux下问题

  在Linux下使用Tomcat,和Windwos下没有太大区别,但在实际项目中,也曾遇到过一些问题。

  jvm参数无法识别问题

  明明在catalina.sh中设置了jvm参数,但是无论怎么检查测试,就是不生效,后来发现jvm参数应该用双引号引起来才能生效:

  JAVA_HOME=/root/jre1.8.0_181

  JAVA_OPTS="-Xms512m -Xmx1536m -XX:MaxPermSize=256m"。

  JAVA_OPTS参数中由于有空格,所以必须用双引号引起来,JAVA_HOME由于没有空格,所以可以不用双引号。在linux下的weblogic中也有类似问题。

  context路径问题

  在Windows下,配置context路径通常按照以下方法,例如,在

  Tomcat \conf\Catalina\localhost\下,新建一个test.xml文件,文件内容如下:

<Context path="/testxn" docBase="/opt/tomcat/testapp"
        debug="0" privileged="true">
  <!-- Link to the user database we will get roles from -->
  <ResourceLink name="users" global="UserDatabase"
                type="org.apache.catalina.UserDatabase"/>
</Context>

  Tomcat启动后,通过http://127.0.0.1:8080/testxn即可以访问系统。

  然而在linux系统中,同样是按照上面的配置,通过上面的地址却访问不了,提示404错误,后来无意间发现,通过http://127.0.0.1:8080/test可以访问系统,context路径竟然和配置文件的名称(test.xml)保持一致,这个问题比较奇怪,只是发现了这个规律,具体原因尚不清楚。

  小结

  本文仅针对日常项目实施和开发测试过程中,Tomcat出现的一些常见问题进行了总结,关于Tomcat的其他使用技巧还有很多,希望大家可以多多总结多多分享。



作者:云竹   

来源:http://www.51testing.com/html/76/n-5002276.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1、背景  以后大家如果是从事专职性能测试,一定要进行分布式压测;  场景:一台控制机和两台执行机,做分布式,要求控制机启动,两台执行机执行,反馈结果。  最贴近工作情况:  控制机:作为办公电脑,工作测试电脑。  执行机:代理机,负载机: 可以直接用服务器的电脑;(服务器的电脑比较干净)肉鸡。  jmeter分布式执行原理:  1.jmeter分布式测试时,选择其中一台作为控制机;其它机器作为代理机;  2.执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动jmeter界面,可以理解它是通过命令行模式执行的;  3.执行完成后,代理机会把结果回传...
            0 0 235
            分享
          • 读者提问:产品总是临时加需求,怎么办 ?阿常回答:大多数情况下需求变更是不可避免的,我们需要保持既开放又理性的心态,来拥抱需求变化,同时也要避免太多的需求变更。一、需求变更无法逃避需求变更是一把双刃剑,一方面需求变更可以优化产品功能,提升用户体验;另一方面需求变更给团队带来了开发成本的增加,并且会打击团队的士气。如果某个产品的最终形态就是产品最初的需求分析,没有经历过一次需求变更,这就可能有两种原因:其一,产品将所有细节都考虑到了,TA 是一位很牛的产品经理。其二,整个团队都在抵制需求变更,拒绝做任何产品功能的优化。二、如何控制需求变更当需求变更来临时,我们可以从工作流程上来控制:一...
            0 0 1099
            分享
          •   据华尔街日报援引知情人士消息,埃隆?马斯克 (Elon Musk) 旗下的人工智能创业公司 xAI 正与投资者洽谈融资事宜。此次融资规模达到 30 亿美元,这将使 XAI 的估值达到 180 亿美元。  报道称,考虑参与 xAI 融资的投资方包括风投公司 Gigafund 和投资人 Steve Jurvetson。Gigafund 由曾联合创办 PayPal 的 Stephen Oskoui 和 Luke Nosek 于 2017 年 7 月联合创立。Jurvetson 则是另一家风投公司 Future Ventures 的联合创始人。  值得注意的是,Gigafund 和 Jurvets...
            0 0 766
            分享
          • 看到这个标题,是不是感觉有点牵强,「增长黑客」和「软件测试」怎么能扯上关系?嗯嗯,那我姑且算是蹭一波「增长黑客」的流量吧,但是等文章看完,希望能改变你的看法。最近正在看范冰大神的《增长黑客》,真是感触颇多,但是严格来说,这本书主要写给产品、运营、增长官以及对增长感兴趣的人,我属于最后一类对增长感兴趣的人,但我的主业仍然是做测试。 于是我结合目前项目的测试情况和书中的关键点做了下关联,想到了如下两个可以借鉴的地方,各位看看是否真的牵强吧。 第一点,需求合理性测试。 《增长黑客》这本书第二章的标题是「创造正确的产品」,在增长黑客最主要的 AARRR 模型中,并没有这个步骤的,但是范冰大神把它...
            1 3 1340
            分享
          • 一、为什么从开发转测试笔者从2019年5月开始从一名java开发女程序猿正式转为测试开发工程师,原因除了机缘凑巧之外,当然是因为这个行业对测试工程师的要求已经越来越高,简单做些UI脚本录制和回放的自动化,参考度娘写出框架demo却不知道问题出在哪里的测试人员,已经不能满足企业快速迭代产品,保证产品质量的需求。当一个产品越来越庞大、用例越来越多,用例如何设置、脚本如何规划、代码结构如何优化,当需求变动时又如何做到高可维护、高健壮性的问题会接踵而来。所以,一名优秀的测试开发工程师是必须具备优秀的代码能力,甚至知识面是需要比普通的开发人员更广的,比如他需要熟悉自动化测试、服务器部署、网络架构、软件性...
            0 0 3979
            分享
      • 51testing软件测试圈微信