精华内容
下载资源
问答
  • JVM和tomcat之间的关系,从下面的几个方向说明:1、JVM,java虚拟机,不同设备运行java应用程序的平台。2、Tomcat,apache免费开源的web应用服务器,通过java语言编写,换句话说:tomcat亦是一个java应用程序。-----...

    最近在做微服务部署相关的项目,使用的容器为汤姆猫tomcat,过程中通过和架构师的交流以及自己的理解得出了几个关键信息

    这里记录下。

    JVM和tomcat之间的关系,从下面的几个方向说明:

    1、JVM,java虚拟机,不同设备运行java应用程序的平台。

    2、Tomcat,apache免费开源的web应用服务器,通过java语言编写,换句话说:tomcat亦是一个java应用程序。

    --------  这里不难看出tomcat容器的启动离不开JVM

    3、JVM某种程度上可以被认为是一个虚拟的操作系统,它有着自己的内存模型等;

    4、一个tomcat容器的启动,相当于在JVM中启动了一个进程;

    5、一个tomcat容器中可以启动多个web app这些被看做进程中启动了多个线程。(通过在server.xml中指定多个context)

    6、每个进程都有自己独立的内存空间,因此进程间的通信较为困难;

    7、而进程中的线程启动时,不会额外的分配内存空间,换句话说:进程中的多个线程共享内存空间,因此通信较为方便快速。

    另外一个思考就是:webUI服务中的java代码是否有存在的必要??

    现代微服务架构中,tomcat容器是一个厚重的web容器,一个微服务的启动相当于在部署节点的JVM上增加了一个进程,这必然会带来一定的内存开销;

    对于webUI性质的微服务,建议只保留纯静态文件(javascript、css、gif等),并且部署容器选择更轻量级的nginx;并且在整体部署规划上,将此类服务部署在同一节点上

    展开全文
  • tomcat和jvm的关系

    千次阅读 2018-10-11 18:03:26
    tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同; 分析: tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过程如下: 假设tomcat监听8080...

    1.tomcat和jvm的关系

    tomcat是servlet容器(jsp和servlet);tomcat由Java开发,所以必须运行在jvm上;  tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同;
    

    分析:
    tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过程如下:

    1. 假设tomcat监听8080端口,当一个http请求从主机的8080端口发送过来时,tomcat最先获知。

    2. tomcat将此请求作为任务加入一个队列中,jvm中有若干工作者线程会从这个队列中获取任务。

    3. 假设工作线程A取到了这个任务,那么线程A通过分析请求的url,检查已加载的web.xml配置,来判断此请求应该交给应用的哪个servlet处理(假设应用是用servlet实现的)

    4. 工作线程A调用对应的servlet的方法(service/get/post等),把请求封装成request对象传给servlet

    5. 此时应用开始干活(实际上干活的还是工作线程,只不过执行的是应用中编写的业务逻辑),解析请求参数,处理业务流程,生成response

    6. 工作线程A把response回送给请求的发送端。

    7. 通常情况下,tomcat启动时候使用的jdk的路径默认为环境变量里配置的JAVA_HOME;
      修改默认jdk:我们都知道启动tomcat可以通过运行bin下的startup.bat,startup.bat会调用catalina.bat文件,而catalina.bat会调用setclasspath.bat文件来获取JAVA_HOME和JRE_HOME这两个环境变量的值,因此若要在tomcat启动时指向特定的JDK,则需在setclasspath.bat文件的开头处加上JAVA_HOME和JRE_HOME。

    8. eclipse自带编译工具,只需用jre即可(java项目只能运行在jvm上/运行类库) jdk开发工具包

    展开全文
  • JDK、JRE、JVMTOMCAT之间的关系

    千次阅读 2018-02-05 11:25:36
    JDK是开发人员开发使用,jre是用来运行java程序,就是...JDK中包含JRE,在JDK安装目录下有一个名为jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里就是jvm,lib中则是jvm工作所需要类库,而jvm和 l

     

    JDK是开发人员开发使用,jre是用来运行java程序,就是java程序的运行环境,jvm是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。

    JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。jdk是java语言编写的,用来给java程序调用的,jvm因为与平台进行交互,是用c/c++和汇编语言编写的,

    jdk是java运行和编译的,tomcat是web项目的运行容器,java没有jdk没办法编译运行,java运行必须依赖jdk的环境,但是不一定需要tomcat,也可以放在weblogic等服务器中 


    展开全文
  • tomcat和Jvm的关系.txt

    2020-03-28 18:34:03
    JVM(虚拟机),相当于电脑安装系统一样,可以运行应用程序。让tomcat跑起来,就得有jdk,而jdk自带了JVM.
  • 目录:一、基础概念二、进程线程关系(进程线程都是CPU工作时间段的描述)1、进程概念2、线程概念3、进程线程区别(资源管理方式不同)4、进程线程的优缺点5、进程线程的关系三、它们的线程数关系(java应用)1...
    e98aef95a5fbfebce8a629195fa37854.png

    目录:

    一、基础概念

    二、进程和线程关系(进程和线程都是CPU工作时间段的描述)

    1、进程概念

    2、线程概念

    3、进程和线程区别(资源管理方式不同)

    4、进程和线程的优缺点

    5、进程和线程的关系

    三、它们的线程数关系(java应用)

    1、存在形式和之间的关系( jvm ←→ tomcat < dubbo , mq client > ←→ mq server )

    2、JVM线程大小分配原则

    1)、线程数量的影响因素

    2)、如何确定线程池大小

    3)、如何解决线程数分配不合理的问题

    一、基础概念

    1、JVM:java虚拟机2、Tomcat:轻量级的web服务(HTTP服务)3、Dubbo:RPC服务的实现(dubbo协议是netty-socket套接字(TCP/IP的封装)进行通信)4、Rabbit mq:消息队列服务(基于AMQP协议)

    二、进程和线程关系(进程和线程都是CPU工作时间段的描述)

    1、进程概念

    具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是操作系统进行资源分配和调度的一个独立单位

    2、线程概念

    1)、线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位,比进程更小的能独立运行的基本单位。2)、基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。

    3、进程和线程区别(资源管理方式不同)

    主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。1)、一个程序至少有一个进程,一个进程至少有一个线程。(隶属关系不同)2)、线程的划分尺度小于进程,使得多线程程序的并发性高。(大小不同)3)、进程在执行过程中拥有独立的内存单元,而多个线程共享内存。(内存使用方式不同)4)、每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,由应用程序提供多个线程执行控制。(执行方式不同)

    4、进程和线程的优缺点

    线程执行开销小,但不利于资源的管理和保护,而进程正相反。同时,进程可以跨机器迁移(在KVM虚拟化平台上实现虚拟机的跨机迁移),而线程不能。

    5、进程和线程的关系

    线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

    三、它们的线程数关系(java应用)

    1、存在形式和之间的关系( jvm ←→ tomcat < dubbo , mq client > ←→ mq server )

    1)、JVM:java虚拟机,属于一个进程。日志标志:2018-12-21 16:45:20,148 [pool-29298-thread-1] DEBUG c.w.d.d.m.V.getTimeoutTasks(自定义jdk线程池)2)、Tomcat:web服务,当tomcat启动时,进程管理器开启一个javaw进程,即:一个tomcat对应一个jvm。日志标志:2018-12-21 16:48:46,348 [http-apr-0.0.0.0-8680-exec-2] DEBUG c.w.h.d.m.U.selectByPrimaryKey(tomcat线程池,该线程池主要处理HTTP请求)3)、Dubbo:以线程方式存在日志标志:2018-12-21 16:53:00,056 [DubboServerHandler-192.168.172.53:20890-thread-292] DEBUG c.w.p.d.m.U.countByExample (自定义jdk线程池)
    4)、Rabbit MQ:MQ client以线程形式存在,MQ server以进程形式存在。MQ client日志标志:2018-12-21 16:56:35,932 [SimpleAsyncTaskExecutor-1] INFO c.w.s.whale.config.ds(自定义jdk线程池)

    2、JVM线程大小分配原则

    1)、线程数量的影响因素

    对于一个JVM实例到底能开多少个线程?其影响有以下几方面:-Xms: 初始化Java堆的大小。-Xmx: 最大Java堆大小-Xss:每个线程的堆栈大小系统限制: 系统最大可开线程数不考虑系统限制:创建的线程数量达到31842个时系统中无法创建任何线程-Xms-Xmx-Xss结果1024m1024m1024k17371024m1024m64k26077512m512m64k31842256m256m64k31842 上面测试结果可以看出增大堆内存(-Xms,-Xmx)会减少可创建的线程数量,增大线程栈内存(-Xss,32位系统中此参数值最小为60K)也会减少可创建的线程数量。结合系统限制:线程数量31842的限制是是由系统可以生成的最大线程数量决定的:/proc/sys/kernel/threads-max,可其默认值是32080。修改其值为10000:echo 10000 > /proc/sys/kernel/threads-max,修改后的测试结果如下:-Xms-Xmx-Xss结果256m256m64k9761是不是意味着可以配置尽量多的线程?再做修改:echo 1000000 > /proc/sys/kernel/threads-max,修改后的测试结果如下:-Xms-Xmx-Xss结果256m256m64k32279128m128m64k32279发现线程数量在达到32279以后,不再增长。查了一下,64位Linux系统可创建的最大pid数是32768,这个数值可以通过/proc/sys/kernel/pid_max来做修改(修改方法同threads-max),但是在64系统下这个值只能改小,无法更大。在threads-max一定的情况下,修改pid_max对应的测试结果如下:pid_max-Xms-Xmx-Xss结果1000128m128m64k58210000128m128m64k9507结论:影响Java线程数量的因素如下:Java虚拟机:-Xms、-Xmx、-Xss操作系统限制:/proc/sys/kernel/pid_max(系统已用的线程或进程数)/proc/sys/kernel/thread-max(系统可生成最大线程数)max_user_process(ulimit -u)(用户最大进程数)/proc/sys/vm/max_map_count(进程最大线程数)

    2)、如何确定线程池大小

    应用分类:(N 代表 CPU 个数)

    • CPU 密集型应用,线程池大小设置为 N + 1 (应用计算密集)
    • IO 密集型应用,线程池大小设置为 2N (读写磁盘较密集)

    估算公式如下:线程池大小 = ((线程 IO time + 线程 CPU time )/线程 CPU time ) CPU数目解释:通过公式得出需要3个具体数值

    • 请求所消耗的时间 (线程 IO time + 线程 CPU time)
    • 请求计算时间(线程 CPU time):请求总耗时 - CPU IO time
    • CPU 数目:查看cat /proc/cpuinfo| grep "processor"| wc -l

    结论:JVM的线程栈内存越大,那么能创建的线程数量越少,越容易发生java.lang.OutOfMemoryError: unable to create new native thread。

    3)、如何解决线程数分配不合理的问题
    • 如果程序中有bug,导致创建大量不需要的线程或者线程没有及时回收,那么必须解决这个bug,修改参数是不能解决问题的。
    • 如果程序确实需要大量的线程,现有的设置不能达到要求,那么可以通过修改MaxProcessMemory,JVMMemory,ThreadStackSize这三个因素,来增加能创建的线程数:

    MaxProcessMemory 使用64位操作系统 JVMMemory 减少JVMMemory分配 ThreadStackSize 减小单个线程的栈大小

    ---------------------------------------------------------

    微信公众号“程序员之路”,路漫漫其修远兮,吾将上下而求索!

    轻轻按住下面的它,让我们结伴,共同成长!

    016512c24936eb34350e64604ddb3cf9.png
    展开全文
  • (3)是java运行编译,java没有jdk没办法编译运行,java运行必须依赖jdk环境 (4)jdk是java语言编写,用来给java程序调用 2.JRE: (1)jre是用来运行java程序,就是java程序运行环境 3.JVM: (1)jvm是整个java...
  • tomcat和jvm是什么关系

    千次阅读 2019-07-11 16:54:12
    以下是所有解析 一: Tomcat 是 Java 程序,运行在 JVM 之上,差不多你的 QQ 运行在你的 Windows 之上一样,启动的时候做了好多好多的工作为了让你的应用能够通过 ...题主,Tomcat和JVM的关系,不用想的太复杂,其...
  • tomcat和jvm的关系,总结几句话: ▲ 运行一个Java程序(一个main方法),就会产生一个jvm实例,(我猜)此jvm实例的内存大小为默认大小或者如果给jvm设置了大小就按照设置的大小。main方法执行过程中产生的对象、...
  • java.exejavaw都可以粗略说成替代jvm.dll执行class文件 区别: java.exe控制台相关联 javaw.exeGUI程序相关联 2.ide开发工具(以myeclipse为例) 启动myeclipse会启动一个jvm,可以理解成jav...
  • tomcatjvm的关系

    千次阅读 多人点赞 2018-07-22 19:29:29
    tomcat跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jkdbin目录告诉tomca,就可以了。 2,有web服务器不必安装jdk,因为自带了,如weblogic。 3,tomcat web容器,主要有jspservlet有关, ...
  • tomcatjvm关系

    千次阅读 2017-07-27 12:16:14
    现象: 一个tomcat可以有多个web应用,当它启动时,会启动一个jvm...其作为Servlet容器,有三种工作模式:独立Servlet容器、进程内Servlet容器进程外Servlet容器。 Tomcat Server处理一个HTTP请求过程:
  • TomCatJvm关系

    千次阅读 2017-10-26 18:00:03
    tomcat跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jkdbin目录告诉tomca,就可以了。 2,有web服务器不必安装jdk,因为自带了,如weblogic。 3,tomcat web容器,主要有jspservlet有关, ...
  • jdk和tomcat的关系

    2020-08-27 20:52:15
    关系:jdk可以在tomcat下运行,tomcat是jdk编译工具。 1.什么是jvm 我们从操作系统层面来理解,jvm其实就是操作系统中一个进程。既然是一个进程,那么我们很容易可以通过任务管理器来查看。假设此时我们...
  • 1、存在形式之间的关系jvm ←→ tomcat < dubbo , mq client > ←→ mq server ) 2、JVM线程大小分配原则 1)、线程数量的影响因素 2)、如何确定线程池大小 3)、如何解决线程数分配不合理的问题 最新...
  • 文章目录一、基础概念二、进程线程关系(进程线程都是CPU工作时间段的描述)1、进程概念2、线程概念3、进程线程区别(资源管理方式不同)4、进程线程的优缺点5、进程线程的关系三、它们的线程数关系(java...
  • 一、Tomcat和JDK的关系:  1. Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统一个java 虚拟机。  2. JAVA程序启动时JVM都会分配一个初始内存最大内存给这个应用程序。这个初始内存...
  • 一、Tomcat和JDK的关系: 1. Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统一个java 虚拟机。 2. JAVA程序启动时JVM都会分配一个初始内存最大内存给这个应用程序。这个初始内存最大内...
  • Tomcat优化

    2018-06-11 14:07:25
    JVM Tomcat的关系 1.什么是jvm 我们从操作系统的层面来理解,jvm其实就是操作系统中的一个进程。既然是一个进程,那么我们很容易的可以通过任务管理器来查看。假设此时我们启动myeclipse(myeclipse其实就是用...
  • TomcatJVM调优

    2019-11-13 09:38:39
    其中持久代主要存放是Java类类信息,与垃圾收集器需要收集Java对象关系不大,而年轻代年老代划分是对垃圾收集影响比较大。 年轻代 所有新生成对象首先都是放在年轻代,年轻代目标是尽可能快速...
  • Tomcat学习笔记

    2018-11-18 07:38:10
    基础篇 1、url访问路径:比如http://localhost:8080/deploy/test则默认访问...2、启动/关闭 tomcat(1)启动:bin目录下 ./startup.sh(2)关闭:bin目录下 ./shutdown.sh 进阶篇 JVM和tomcat的关系 1、一个tomcat只...
  • web容器:apache2+tomcat6 jvm:jdk6 linux x64 程序:status2+spring+ibatis 缓存:memcache 服务器:4颗双核cup 8G内存 由于本项目是网站项目只做展示用, 对时时性没要求, 做了几乎所有对象缓存,...
  • 作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据搜索引擎等方面技术,大多数编程语言都会使用,但更擅长Java、PythonC++。平时喜欢看书写作、...
  • 目录类加载机制类加载器双亲委派机制类加载器初始化过程扩展类加载器创建扩展类加载器继承关系:应用类加载器创建双亲委派机制双亲委派机制源码加载递归调用图设计双亲委派目的自定义类加载器打破双亲委派...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚TomcatSocket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...
  • 一、概述从应用角度来看,DockerFile、ImagesContainer分别代表软件三个不同阶段。DockerFile:软件原材料(镜像构建脚本),面向开发Images:软件交付产品,交付标准Container:软件运行状态,设计部署与...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚TomcatSocket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲...
  • tomcat专题二:jdk安装以及tomcat基本安装使用书接tomcat专题一,在这一节将介绍一下java运行环境的安装以及tomcat的基本安装使用。可能有人会问安装tomcat跟java运行环境有什么关系?正像专题一介绍的那样,...
  • 在目前流行的互联网架构中,对一个应用来说,Tomcat是首,...如果能够掌握Tomcat的原理,那么是非常有用的,比如:如果我们能弄清楚TomcatSocket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。如果我...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 126
精华内容 50
关键字:

jvm和tomcat的关系