停止Tomcat webapp报错的尝试解决

ubuntu12下 tomcat的版本是7.0.40.0

 

状况:

    发现某个web项目最近往往执行bin/shutdown.sh无法关闭tomcat服务器,必须手动kill进程才行。

    该web项目主要执行定时执行大量的http请求 将返回结果处理后存入mongo数据库

    因此查看catalina.out日志,发现停止tomcat时抛出很多内存泄漏的警告 以下:

 

INFO: Stopping service Catalina
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [AsyncAppender-Worker-Thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [ZkClient-EventThread-14-192.168.161.35:2181,192.168.161.36:2181,192.168.161.37:2181] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [localhost-startStop-1-SendThread(192.168.161.37:2181)] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [localhost-startStop-1-EventThread] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-3] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [MongoCleaner1479337147] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-3] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [MongoCleaner58644297] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [pool-4-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [pool-4-thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [pool-4-thread-3] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [pool-4-thread-4] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

....

SEVERE: The web application [xxxxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@5a2224fb]) and a value of type [aaaaa] (value [aaaaa@77aa08f7]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [xxxxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@5a2224fb]) and a value of type [aaaaa] (value [aaaaa@3c32cd81]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [xxxxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@5a2224fb]) and a value of type [aaaaa] (value [aaaaa@2b51ef07]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [xxxxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@5a2224fb]) and a value of type [aaaaa] (value [aaaaa@1023cac9]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [xxxxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@5a2224fb]) and a value of type [aaaaa] (value [aaaaa@1dd65a66]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks

 

其中线程名pool-4-thread-xxx引起了注意,应该是一个线程池,查看代码,发现为批量发送HTTP请求有建了一个ThreadPoolExecutor

 

    private static ThreadPoolService threadPoolService = new ThreadPoolService();

    private ThreadPoolService() {
        this.threadPoolExecutor = new ThreadPoolExecutor(100, 150, 500, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new ThreadPoolExecutor.CallerRunsPolicy());
        // this.completionService = new
        // ExecutorCompletionService<Object>(this.threadPoolExecutor);
    }

 日志中名叫pool-4-thread-xxx 有100个,很明显,tomcat没能关掉ThreadPoolExecutor的核心线程,因此需要在关闭tomcat前手动关闭,因此在web.xml中新增一个ServletContextListener的实现

 

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		ThreadPoolService.getInstance().shutdownNow();	

	}

 重新尝试 果然所有的

 

SEVERE: The web application [xxxxx] appears to have started a thread named [pool-4-thread-x] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

没有了,还剩下一些ThreadLocal无法释放以及剩下一些Thread无法释放的警告

查资料

http://stackoverflow.com/questions/5292349/is-this-very-likely-to-create-a-memory-leak-in-tomcat

回复中给出了ThreadLocal的解决方案

 

public Integer immolate() {
        int count = 0;
        try {
            final Field threadLocalsField = Thread.class.getDeclaredField("threadLocals");
            threadLocalsField.setAccessible(true);
            final Field inheritableThreadLocalsField = Thread.class.getDeclaredField("inheritableThreadLocals");
            inheritableThreadLocalsField.setAccessible(true);
            for (final Thread thread : Thread.getAllStackTraces().keySet()) {
                    count += clear(threadLocalsField.get(thread));
                    count += clear(inheritableThreadLocalsField.get(thread));
            }
            logger.info("immolated " + count + " values in ThreadLocals");
        } catch (Exception e) {
            throw new Error("ThreadLocalImmolater.immolate()", e);
        }
        return count;
    }

    private int clear(final Object threadLocalMap) throws Exception {
        if (threadLocalMap == null)
                return 0;
        int count = 0;
        final Field tableField = threadLocalMap.getClass().getDeclaredField("table");
        tableField.setAccessible(true);
        final Object table = tableField.get(threadLocalMap);
        for (int i = 0, length = Array.getLength(table); i < length; ++i) {
            final Object entry = Array.get(table, i);
            if (entry != null) {
                final Object threadLocal = ((WeakReference)entry).get();
                if (threadLocal != null) {
                    log(i, threadLocal);
                    Array.set(table, i, null);
                    ++count;
                }
            }
        }
        return count;
    }

 

 

根据答复中的代码猜想,ThreadLocal的报错 估计是某些线程的ThreadLocal无法释放,为什么无法释放,因为那些线程还没停掉,每个ThreadLocal都是被一个Thread的ThreadMap下以<ThreadLocalObject, Object>的entry形式维护着,

这些entry继承了WeakReference,以上代码应该是将每个thread的threadMap的entry设成null,这样原来的entry没有引用源,作为一个WeakReference会在GC中被清除掉。

 

事实上也是如此,在将ServletContextListener换成

	public void contextDestroyed(ServletContextEvent sce) {
		ThreadPoolService.getInstance().shutdownNow();	
		
		immolate();
	}

 后,tomcat关闭报错只剩下一些Thread无法停止了

INFO: Stopping service Catalina
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [AsyncAppender-Worker-Thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [ZkClient-EventThread-14-192.168.161.35:2181,192.168.161.36:2181,192.168.161.37:2181] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [localhost-startStop-1-SendThread(192.168.161.37:2181)] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [localhost-startStop-1-EventThread] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-1-thread-3] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [MongoCleaner1479337147] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-2] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [cluster-2-thread-3] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [xxxxx] appears to have started a thread named [MongoCleaner58644297] but has failed to stop it. This is very likely to create a memory leak.
Feb 28, 2015 9:45:04 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

 

这些线程可能来自于各种框架以及各种未知...很难获取到它们去挨个停止,如果根据名称去找然后停止的话,又比较傻...继续查资料

http://wiki.apache.org/tomcat/MemoryLeakProtection 了解到

 

If a webapp creates a thread, by default its context classloader is set to the one of the parent thread (the thread that created the new thread). In a webapp, this parent thread is one of tomcat worker threads, whose context classloader is set to the webapp classloader when it executes webapp code.

Furthermore, the spawned thread may be executing (or blocked in) some code that involves classes loaded by the webapp, thus preventing the webapp classloader from being collected.

So, if the spawned thread is not properly terminated when the application is stopped, the webapp classloader will leak because of the strong reference held by the spawned thread.

 

就是说 在tomcat容器里,每个线程的ClassLoader归根结底都被默认设置成webapp ClassLoader。当某些线程无法及时关闭时,webapp classloader就会因为这些线程拥有的强引用,无法正常gc,因此报警。

了解了这个,就有办法了,修改public Integer immolate() method 插入几行

for (final Thread thread : Thread.getAllStackTraces().keySet()) {
                    count += clear(threadLocalsField.get(thread));
                    count += clear(inheritableThreadLocalsField.get(thread));
                    
                    if (thread != null) {
                    	thread.setContextClassLoader(null);
                    }
            }

 

这样这些还没停止的线程的上下文ClassLoader就和webapp ClassLoader无关了,webapp ClassLoader可以正常GC,报错消失。

 

 

问题是解决了,但其中很多细节半猜半试出来的,并没有吃透它们,这些还待自己慢慢学习琢磨。

 

 

 

Tomcat项目404,报WARNING:org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads 前些日子买的阿里云服务器到期了,服务器停机几天后续费,重启tomcat时报错: 07-Aug-2019 16:56:41.056 WARNING [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [EnglishClub... 阅读详情

相关推荐

关于Java中ForkJoinPool.commonPool()详解

jdk8中的并行流parallelStream,CompletableFuture异步编程中有没有用到线程池? ForkJoinPool.commonPool()是什么?它的参数是固定的?还是程序可干预的?

github_38727595的博客 5366

tomcat 内存泄漏 threadlocals

项目运行中日志打印 org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [xxx] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@4b0c8383]) and a value of type [com.xx.xxxx.Comm

weikzhao0521的博客 1万+

IDEA 2022创建Maven Web项目:两种方式详解与Tomcat配置

在Java Web开发中,Maven作为项目构建和依赖管理的核心工具,通过其标准化的项目对象模型(POM)和生命周期管理,极大地简化了项目的构建、依赖解析和打包部署流程。其核心原理在于通过坐标机制统一管理jar包,并结合本地仓库、远程中央仓库及镜像仓库实现高效的依赖获取。这一技术价值在于为开发者提供了可复用的项目模板(Archetype)和标准化的目录结构,从而提升团队协作效率与项目可维护性。在实际应用场景中,无论是快速创建企业级Web应用还是微服务模块,Maven都是不可或缺的基础设施。本文聚焦于使用ID

weixin_30386713的博客 506

ThreadLocal导致内存泄漏排查小记

背景描述公司sso域名变动,所有涉及的产品都要修改相关的配置。配置修改好之后,运行期间发现业务系统不稳定,出现了很多json解析异常。但是随着sso那边问题得到修改,我们自己的...

tianjingle 2468

Ubuntu 12.04手动部署Tomcat 7完整指南

Servlet容器是Java Web应用运行的核心基础设施,其本质是遵循Servlet规范、提供HTTP请求处理与生命周期管理的Java进程环境。理解Tomcat的启动原理、JDK版本兼容性、用户权限隔离及配置文件加载机制,是掌握Java Web基础架构的关键。在老旧系统维护、嵌入式教学或遗留系统迁移等场景中,手动部署(而非apt安装)能精准控制CATALINA_HOME、JAVA_HOME路径和server.xml监听行为,避免因符号链接解析失败、默认端口暴露或服务脚本权限缺陷导致的500/404/连接拒

weixin_34174105的博客 545

IDEA整合Tomcat:从环境配置到热部署调试全攻略

Java Web开发中,本地开发调试环境的搭建是提升效率的关键。通过将外部服务器(如Tomcat)集成到IDE(如IntelliJ IDEA)中,开发者可以实现代码的即时反馈和所见即所得。其核心原理在于IDE能够管理服务器的生命周期、部署构件,并提供热部署(Hot Swap)和断点调试支持。这种集成方式的技术价值在于大幅缩短了“修改-部署-测试”的循环周期,使开发者能够专注于业务逻辑而非重复的构建流程。典型的应用场景包括传统Servlet/JSP项目开发、Spring MVC应用调试,以及需要精细控制服务器

weixin_33901926的博客 453

问题记录:同一台电脑上,两台Tomcat运行同样的webapp项目,只能一个启动成功

本机设置两个Tomcat服务器运行 1. 按照网上找到的资料,修改了第二台Tomcat目录中的conf/server.xml配置文件中的端口号相关配置 参见:http://blog.csdn.net/lengdaochuqiao/article/details/54881855 2. 两台Tomcat都部署同样的webapp项目,启动 3. 第一台启动ok,第二台启动失败: 对比打印日志

yfy236的专栏 1386

关键词‖旋变传感器

旋转变压器(以下简称旋变)安装在永磁同步驱动电机的非传动端,其作用是检测转子的位置和速度。目前,通常采采用结构简单、坚固耐用、环境适应性好的磁阻式旋变作为位置传感器。

m0_72345077的博客 2147

【debug】-tomcat始终加载不了jar文件

从今天开始记录调试问题花费了很长时间的问题,方便以后借鉴。也期待能给网友提示。 问题描述: 在Tomcat下开发jsp,需要查询数据库。引入 mysql-connector-java-5.1.26-bin.jar,始终在webapp中报错,找不到 com.mysql.jdbc.DriverManager 解决过程: 1 通过 alert打印异常信息。定位  com.mysq

l529291260的专栏 2118

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 521

手把手教你用NE555+LM324搭建红外倒车雷达(附Multisim仿真文件)

本文详细介绍了如何使用NE555定时器和LM324运算放大器搭建一个红外倒车雷达系统。内容涵盖从核心原理拆解、模块电路设计(包括红外发射、接收放大、检波与电压比较)到实战焊接调试的全过程,并提供了Multisim仿真验证思路,帮助电子爱好者与初学者将模拟电路理论转化为可工作的实用项目。

echo99的专栏 676

so tomcat 启动 库报错_Java-tomcat在Linux环境下加载外部so文件问题

The important thing to know about using JNI under Tomcat is that one cannot place the native libraries OR their JNI interfaces under the WEB-INF/lib or WEB-INF/classes directories of a web application...

weixin_33186486的博客 527

【SAP-MDG】工作流任务配置实战:从基础配置到代理分配详解

本文详细解析了SAP MDG工作流任务配置的全流程,从基础配置到代理分配的关键操作。通过实战案例和最佳实践,帮助用户掌握Configure Workflow Tasks的核心技巧,包括环境检查、代理分配、SWDD事务码使用及常见问题排查,提升主数据管理效率。

weixin_33738555的博客 248

用Tomcat运行JSP

新建JSP文件    在apache-tomcat-7.0.42\webapps\ROOT目录下新建JSP文件ex6_1.jsp(先用记事本或文件编辑器写好txt文件,再将后缀改为.jsp)。用tomcat运行JSP文件后浏览结果    打开tomcat服务器,然后用浏览器打开http://localhost:8080/ex6_1.jsp,即可看到执行后的结果。其后apache-tomcat-7....

Kathy的博客 1万+

ANSYS接触分析实战:从法兰连接案例看接触刚度与穿透容差的黄金搭配

本文以法兰连接为实战案例,深入解析了ANSYS接触分析中接触刚度(FKN)与穿透容差(FTOLN)的参数设置策略。通过系统性敏感性分析,揭示了这对关键参数的博弈关系与调优逻辑,旨在帮助工程师在保证计算收敛的同时,获得高精度的有限元分析结果,有效解决工程中的非线性接触难题。

moon9的博客 312

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2419

Tomcat停机过程分析与线程处理方法

工作中经常遇到因为Tomcat shutdown时自身创建的线程没有及时停止而引起的各种莫名其妙的报错,这篇文章将通过对Tomcat停机过程的梳理,讨论产生这些错误的原因,同时提出了两个可行的解决办法。Tomcat停机过程分析一个Tomcat进程本质上是一个JVM进程,其内部结构如下图所示:(图片来自网络)从上至下分别为Server、service、connector | Engine、host、...

Enweitech Software Works 2495

《QEMU/KVM源码分析与应用》读书笔记1 —— 第1章 QEMU与KVM概述

《QEMU/KVM源码分析与应用》学习笔记1 —— 第一章 QEMU与KVM概述

phmatthaus的专栏 1984

【 Tomcat 】

HTTP服务器可以理解为就是在TCP服务器的基础上加上了一些额外的功能,

qq_64317046的博客 1294

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Ubuntu 14.04下用apt-get安装Tomcat 7的最小侵入式部署指南

Tomcat 是 Java Web 应用的核心 Servlet 容器,其稳定运行依赖于与操作系统、JVM 和内核的深度适配。在老旧但仍在服役的 Ubuntu 14.04 环境中,手动安装或升级至新版 Tomcat 常引发类加载冲突、EL API 版本不匹配、NIO 线程模型失配等底层兼容性问题。apt-get 安装机制通过 Debian 包管理封装了经过千台设备验证的依赖处理、用户权限隔离、日志路径标准化及 init.d 启动脚本,实现最小侵入性部署。该方式特别适用于工控网关、实验室服务器、嵌入式后台等资源

weixin_33693070的博客 332

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

在windows中使用tomcat搭建Jenkins

必须重启jenkins,插件才能生效在windows,cmd中进入到tomcat的bin目录下service.bat 提供了install、remove/uninstall两个可选操作,分别对应"安装服务",“移除服务”。#service.bat install 服务名称#卸载的话 service.bat remove Jenkinsservice.bat install Jenkins #安装。

qq_50247813的博客 1477

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Tomcat停机过程分析及线程处理方法

工作中经常遇到因为Tomcat shutdown时自己创建的线程因没有及时停止而引起的各种莫名其妙的报错,这篇文章将通过对Tomcat停机过程的梳理讨论产生这些错误的原因,同时提出了两个可行的解决办法。Tomcat停机过程分析一个Tomcat进程本质上是一个JVM进程,其内部结构如下图所示:(图片来自网络)从上至下分别为Server、service、connnector | Engine、host...

yine的专栏 1688

tomcat 8.5 第一次启动正常,关闭后无法再次启动问题

问题描述: 使用Linux系统: centos_7_06_64_20G_aliba... jdk1.8.0_172 apache-tomcat-8.5.35 开放端口:80;8080;3679.... 解压tomcat后第一次使用 ./startup.sh命令 启动tomcat ,使用 ip:8080 可以访问tomcat主页; 此时使用./shutdown.sh 命令关闭tomcat可...

兴浩的博客 2198

Tomcat安装与卸载全攻略:从环境配置到彻底清理的实践指南

在Java Web开发中,Servlet容器是承载Web应用运行的核心组件,它负责处理HTTP请求、管理Servlet生命周期并提供会话管理等基础服务。其工作原理是通过解析web.xml等配置文件,将请求映射到对应的Servlet进行处理,最终生成响应返回给客户端。这一技术价值在于为Java EE/Jakarta EE规范提供了轻量级、高性能的实现基础,使得开发者能够快速构建和部署动态网站及企业级应用。常见的应用场景包括电商平台、内容管理系统和企业内部信息系统等。本文聚焦于广泛使用的Apache Tomca

weixin_33724570的博客 338
上一篇: Spring 配置scope为request,session,application的bean需要注意的小tip
下一篇: ubuntu常用软件
iteye_15708
博客等级 码龄8年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值