tomcat为啥越来越慢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat为啥越来越慢相关的知识,希望对你有一定的参考价值。

参考技术A 启动慢是因为在启动时需要加载很多包,这说名你的工程有很多外部包,只要删掉就会变快了。
可以在tomcat根目录下找到work\Catalina\localhost路径下把不要的工程名删掉,还有根目录下webapps文件夹里的不需要的工程删掉这样应该会快很多。

为啥垃圾回收这么慢?

【中文标题】为啥垃圾回收这么慢?【英文标题】:Why is Garbage Collection so Slow?为什么垃圾回收这么慢? 【发布时间】:2015-12-20 06:04:01 【问题描述】:

使用 %prun 在 IPython 中分析我的代码,我注意到大部分函数时间都用于垃圾收集(0.334 秒对 0.428 总时间)。

79254 function calls (77408 primitive calls) in 0.428 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     5    0.334    0.067    0.334    0.067 gc.collect
 15757    0.005    0.000    0.007    0.000 isinstance
  1584    0.002    0.000    0.004    0.000 dtypes.py:68(is_dtype)

我尝试在调用函数之前和返回其值之后禁用/启用垃圾收集,但时间几乎相同。

import gc

gc.disable()
x = foo()
gc.disable()

有谁知道为什么这是一个瓶颈以及如何加快速度?

我的 Python/Pandas 版本如下:

Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec  6 2015, 18:57:58) 
Pandas 0.17.1

【问题讨论】:

我猜你的代码会产生很多垃圾。 我猜答案是“不”,但你能在这里分享任何代码吗?否则,也许你可以写一些东西来证明这个 gc 问题。 :s @AndyHayden 我还在分析。看起来瓶颈是一个运行大量回归的函数。如果我能整理出 MVE,我会编辑我的帖子。 另一个想法是覆盖gc.collect = lambda: None(然后放回去!)。也许更深层次的东西是启用 gc 和手动收集。不知道这是否真的有效,但值得一试。 @stefan 不,它已从我的优先事项中删除。实际上我可能很快会再次访问它,所以如果有任何更新,我会提供更新。 【参考方案1】:

垃圾收集是许多现代语言的高级功能/抽象。它使程序变慢,但也使程序更不容易出错并且更容易创建。

这里有一些关于这个特定主题的好文章:

Python GarbageOnly slow if you use it wrong

【讨论】:

嘿,在 GC 部分只有慢说TODO: find out what he meant somehow【参考方案2】:

您禁用了gc,因此实际上可能有一些东西明确地调用了gc.collect。你可以通过在 IPython 中使用这个技巧找到罪魁祸首:

import gc
import traceback

old_collect = gc.collect

def new_collect(*args, **kwargs):
    traceback.print_stack()
    old_collect(*args, **kwargs)

gc.collect = new_collect

请注意,它仅在代码执行 import gc 时才有效,它不适用于 from gc import collect(我们正在操作 gc 模块)。

如果发现问题,请报告错误。

【讨论】:

以上是关于tomcat为啥越来越慢的主要内容,如果未能解决你的问题,请参考以下文章

为啥tomcat换成80端口就不能访问了?而其他端口可以

为啥我的tomcat启动要这么久?

打开杀毒软件后MyEclipse中启动Tomcat很慢?

Eclipse启动项目超级的慢,这是为啥

tomcat启动特别慢,求高手解答!

myeclipse6.5 启动tomcat 特别慢,请高手分析下原因。