精华内容
下载资源
问答
  • 2021-02-26 11:14:30

    找到关键点

    在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的线程导致对外内存泄露了。下面就是根据线程大小计算其泄露内存量是不是确实能够引起OOM了。

    发现内存计算对不上

    由于我们这边设置的Xss是512K,即一个线程栈大小是512K,而由于线程共享其它MM单元(线程本地内存是是现在线程栈上的),所以实际线程堆外内存占用数量也是512K。进行如下计算:

    12563 * 512K = 6331M = 6.3G

    整个环境一共4G,加上JVM堆内存1.8G(1792M),已经明显的超过了4G。

    (6.3G + 1.8G)=8.1G > 4G

    如果按照此计算,应用应用早就被OOM了。

    怎么回事呢?

    为了解决这个问题,笔者又思考了好久。如下所示:

    Java线程底层实现

    JVM的线程在linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线程就对应linux的lwp(轻量级进程,也是进程,只不过共享了mm_struct,用来实现线程),一个thread.start就相当于do_fork了一把。

    其中,我们在JVM启动时候设置了-Xss=512K(即线程栈大小),这512K中然后有8K是必须使用的,这8K是由进程的内核栈和thread_info公用的,放在两块连续的物理页框上。如下图所示:

    更多相关内容
  • 在android中,一个应用程序会对应一个dvm实例。那在pc端,JVM是否也是这样?
  • 2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都有一个JVM? 演示 1、用命令启动两个一样的java程序。 2、用jvisual观察到有两个WhileTrue程序的进程进程的概念 在多道程序工作的...

    先提出两个问题:

    1、命令启动了两个java程序,它们之间是什么关系?
    2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都有一个JVM?

    演示

    1、用命令启动两个一样的java程序。
    在这里插入图片描述

    2、用jvisual观察到有两个WhileTrue程序的进程。
    在这里插入图片描述

    进程的概念

    在多道程序工作的环境下,操作系统必须能够实现资源的共享和程序的并发执行,从而使程序的执行出现了并行、动态和相互制约的新特征。
    为了能反映程序活动的这些新特点, UNIX 引入了进程( process)这个概念。 UNIX的进程是一个正在执行的程序的映象。

    这里需要注意的是程序和进程的区别。一个程序是一个可执行的文件,而一个进程则是一个执行中的程序实例。

    在UNIX/Linux系统中可以同时执行多个进程(这一特征有时称为多任务设计),对进程数目无逻辑上的限制,并且系统中可以同时存在一个程序的多个实例。

    各种系统调用允许进程创建新进程、终止进程、对进程执行的阶段进行同步及控制对各种事件的反映。在进程使用系统调用的条件下,进程便相互独立的执行了。

    因为一个进程对应于一个程序的执行,所以绝对不要把进程与程序这两个概念相混淆。进程是动态的概念,而程序为静态的概念。实际上,多个进程可以并发执行同一个程序。

    结论

    JVM是一份本地化的程序,本质上是可执行的文件,是静态的概念。程序运行起来成为进程,是动态的概念。
    java程序是跑在JVM上的,严格来讲,是跑在JVM实例上的,一个JVM实例其实就是JVM跑起来的进程,二者合起来称之为一个JAVA进程。
    各个JVM实例之间是相互隔离的。

    展开全文
  • Java中每个进程都有一个JVM吗,就相当于lunux中每个进程都有独立的内存空间吗,哪位大神能帮忙详细解释一下
  • Java进程之间以及跟JVM关系

    万次阅读 多人点赞 2018-01-29 10:52:35
    2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都有一个JVM?演示1、用命令启动两个一样的java程序。2、用jvisual观察到有两个WhileTrue程序的进程进程的概念 在多道程序工作的环境下...

    先提出两个问题:

    1、命令启动了两个java程序,它们之间是什么关系?
    2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都有一个JVM?


    演示


    1、用命令启动两个一样的java程序。




    2、用jvisual观察到有两个WhileTrue程序的进程。




    进程的概念


     在多道程序工作的环境下,操作系统必须能够实现资源的共享和程序的并发执行,从而使程序的执行出现了并行、动态和相互制约的新特征。

     为了能反映程序活动的这些新特点, UNIX 引入了进程( process)这个概念。 UNIX的进程是一个正在执行的程序的映象。

     这里需要注意的是程序和进程的区别。一个程序是一个可执行的文件,而一个进程则是一个执行中的程序实例。

     在UNIX/Linux系统中可以同时执行多个进程(这一特征有时称为多任务设计),对进程数目无逻辑上的限制,并且系统中可以同时存在一个程序的多个实例。

     各种系统调用允许进程创建新进程、终止进程、对进程执行的阶段进行同步及控制对各种事件的反映。在进程使用系统调用的条件下,进程便相互独立的执行了。

     因为一个进程对应于一个程序的执行,所以绝对不要把进程与程序这两个概念相混淆。进程是动态的概念,而程序为静态的概念。实际上,多个进程可以并发执行同一个程序。


    结论


     JVM是一份本地化的程序,本质上是可执行的文件,是静态的概念。程序运行起来成为进程,是动态的概念。
     java程序是跑在JVM上的,严格来讲,是跑在JVM实例上的,一个JVM实例其实就是JVM跑起来的进程,二者合起来称之为一个JAVA进程。
     各个JVM实例之间是相互隔离的。

    展开全文
  • 查看一个进程对应的端口号

    千次阅读 2021-03-16 04:12:56
    、liunx 下1.查找指定目标项目(atf web工程)进程的pidps -aux | grep atfroot 3582 0.1 11.2 382228 190588 ? Sl 09:31 0:19 java -Datf -jar start.jar etc/jetty.xmlroot 22121 0.0 0.0 1644 508 pts/1 R+ 12:12...

    一、liunx 下

    1.查找指定目标项目(atf web工程)进程的pid

    ps -aux | grep atf

    root 3582 0.1 11.2 382228 190588 ? Sl 09:31 0:19 java -Datf -jar start.jar etc/jetty.xml

    root 22121 0.0 0.0 1644 508 pts/1 R+ 12:12 0:00 grep atf

    2.在全部端口中查找进程号为 pid=3582(atf项目的进程号) 的信息

    netstat -naop | grep 3582

    tcp6 0 0 :::8080 :::* LISTEN 3582/java off (0.00/0/0)

    tcp6 0 0 :::8443 :::* LISTEN 3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.:49454 ::ffff:192.168.6.1:1531 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.:49593 ::ffff:192.168.6.:61616 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.:34871 ::ffff:192.168.6.1:1531 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.2:8080 ::ffff:192.168.88.:3692 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.2:8080 ::ffff:192.168.88.:3689 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.2:8443 ::ffff:192.168.88.:3695 ESTABLISHED3582/java off (0.00/0/0)

    tcp6 0 0 ::ffff:192.168.6.2:8443 ::ffff:192.168.88.:3697 ESTABLISHED3582/java off (0.00/0/0)

    其中 :::8080 和:::8443 是 atf项目打开的端口号,

    其他是已经和atf建立连接的请求服务。

    这里建立的7个链接

    两个oracle的连接

    ::ffff:192.168.6.:49454 ::ffff:192.168.6.1:1531 ESTABLISHED

    ::ffff:192.168.6.:34871 ::ffff:192.168.6.1:1531 ESTABLISHED

    一个apache-activemq的连接

    ::ffff:192.168.6.:49593 ::ffff:192.168.6.:61616

    四个请求连接(表示有两个用户在使用atf系统系统,在生产环境中可以用来判断当前正在使用atf系统的用户数)

    ::ffff:192.168.6.2:8080 ::ffff:192.168.88.:3692 ESTABLISHED3582/java off (0.00/0/0)

    ::ffff:192.168.6.2:8080 ::ffff:192.168.88.:3689 ESTABLISHED3582/java off (0.00/0/0)

    ::ffff:192.168.6.2:8443 ::ffff:192.168.88.:3695 ESTABLISHED3582/java off (0.00/0/0)

    ::ffff:192.168.6.2:8443 ::ffff:192.168.88.:3697 ESTABLISHED3582/java off (0.00/0/0)

    二、 windows 下

    1.查找指定目标进程(java的atf web工程)

    tasklist -v |find "java"

    图像名 PID

    javaw.exe 2760

    2.在全部端口中查找进程号为 pid=3582(atf项目的进程号) 的信息

    netstat -nao |find "2760"

    TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1232

    TCP 0.0.0.0:8443 0.0.0.0:0 LISTENING 1232

    TCP 192.168.88.46:4168 192.168.6.19:1531 ESTABLISHED 1232

    TCP 192.168.88.46:4169 192.168.6.19:1531 ESTABLISHED 1232

    三、

    netstat在显示连接情景是的state的几个值所代表的意义,其实也就是TCP连接的三次握手细分的状态:

    The state of the socket. Since there are no states in raw mode and usually no states used in UDP, this column may be

    left blank. Normally this can be one of several values:

    ESTABLISHED #套结字确立连接

    The socket has an established connection.

    SYN_SENT

    The socket is actively attempting to establish a connection.

    SYN_RECV

    A connection request has been received from the network.

    FIN_WAIT1

    The socket is closed, and the connection is shutting down.

    FIN_WAIT2

    Connection is closed, and the socket is waiting for a shutdown from the remote end.

    TIME_WAIT

    The socket is waiting after close to handle packets still in the network.

    CLOSED The socket is not being used.

    CLOSE_WAIT

    The remote end has shut down, waiting for the socket to close.

    LAST_ACK

    The remote end has shut down, and the socket is closed. Waiting for acknowledgement.

    LISTEN

    he socket is listening for incoming connections. Such sockets are not included in the output unless you spec-

    ify the --listening (-l) or --all (-a) option.

    CLOSING

    Both sockets are shut down but we still don’t have all our data sent.

    UNKNOWN

    The state of the socket is unknown.

    连接进程是通过一系列状态表示的,这些状态有:

    LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。

    各个状态的意义如下:

    LISTEN - 侦听来自远方TCP端口的连接请求,表示这个端口正在开放 可以提供服务;

    SYN-SENT - 在发送连接请求后等待匹配的连接请求,SYN Sent和established是对应的 established是你接受别人发来的数据 而那个是你发出让别人接受 ;

    SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

    ESTABLISHED - 代表一个打开的连接,数据可以传送给用户,是对方与你已经产生了连接 正在通信交换数据 ;

    FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

    FIN-WAIT-2 - 从远程TCP等待连接中断请求;

    CLOSE-WAIT - 等待从本地用户发来的连接中断请求;

    CLOSING - 等待远程TCP对连接中断的确认,表示端口人为或者放火墙使其关闭(也许服务被卸载) ;

    LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;

    TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认,正在等待连接 就是你正在向该端口发送请求连接状态 也许因为网速 也许认证问题 反正你没练上 正在提交连接请求(长时间这样状态会变成第四个) 如:Timewait代表等待《例如:QQ聊天开始时是Listening,建立聊天之后就Established,如果是关闭聊天窗口,就会变成Timewait等待连接…》! ;

    CLOSED - 没有任何连接状态;

    TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;

    传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN;

    还有超时,上面所说的都会时TCP状态发生变化。

    展开全文
  • 是否所有运行的Java应用程序都使用相同的JVM,或者"每个Java应用程序一个JVM"是否适用? (例如,应用程序是IntelliJ IDEA,服务器和NetBeans)此外,分配的JVM与每个Java应用程序使用的进程之间是否存在任何联系?这...
  • 进程、线程与JVM之间的关系

    千次阅读 2012-03-12 09:51:20
    Android 包括一个应用程序框架、几个应用程序库和一个基于 Dalvik 虚拟机的运行时,所有这些都运行在 Linux 内核之上。 通过利用 Linux 内核的优势,Android 得到了大量操作系统服务,包括进程和内存管理、网络...
  • 启动一个java程序,就会启动一个jvm

    千次阅读 2020-03-06 21:35:56
    对于常见的JRE来说,基本上一个Java程序一个Java虚拟机(一个Java进程)。 某个新版本的JRE开始,貌似开始优化这一状况,多个Java虚拟机可以共享一些内存,貌似。 如果觉得统一机器上起多个Java虚拟机浪费cpu和内存...
  • 一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。...
  • 当有多个程序同时运行,并且指定的时同一个jdk时,这个时候jvm是如何分配内存的? 假如 配置了jvm的内存为 2G,现在同时运行3个程序,这时是不是每个程序都有一个独立的jvm,并且每个jvm的内存都是2G呢?
  • 获取JVM 进程 PID

    2022-04-29 09:13:04
    获取JVM 进程 PID 获取JVM 进程 PID cmd 命令 jps -v 使用 jmap 命令生成 jmap命令是JDK提供的用于生成堆内存信息的工具,可以执行下面的命令生成Heap Dump: jmap -dump:live,format=b,file=heap-dump.bin <pid&...
  • JVM一个进程,那么天真的以为就该和操作系统进程内存模型结构保持一致,比如C/C++程序就是和操作系统的进程的内存模型保持一致。但是JVM内存管理中内存的划分明显和操作系统的进程内存模型有很大出入,那么他们...
  • 1、一个tomcat是一个进程,其中有很多线程(与有多少个app无关)  2、一个tomcat启动一个JVM,其中可以有很多APP  3、一个tomcat中部署的多个app,虽然同处一个JVM里,但是由于无法相互调用,所以也可以认为...
  • 1、一个tomcat是一个进程,其中有很多线程(与有多少个application无关) 2、一个tomcat启动一个JVM,其中可以有很多application3、一个tomcat中部署的多个app,虽然同处一个JVM里,但是由于无法相互调用,所以也...
  • Linux系统下如何kill掉一个后台...Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM。因此,所谓停止Java进程,本质上就是关闭JVM。 那么,哪些情况会导致JVM关闭呢? jvm 关闭: 正常关...
  • 一个jvm中的类只能加载一次?

    千次阅读 2020-03-14 17:32:59
    在网上看到有些人说“一个类在一个jvm中只能加载一次”,对此产生了怀疑。 另外,在用flink、spark做计算的时候,有一个疑惑,如果用相同的jar包启动了相同的任务,而这两个任务被分配到了同一个进程的不同线程里,...
  • 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于Linux Kernel的源码分析,今天要说的是JVM里比较常见的一个问题这个问题可能有几种表述•一个Java进程到底能创建多少...
  • Linux系统下查看JVM进程信息

    千次阅读 2019-11-27 18:44:43
    就顺便学习一下Linux下怎么抓取JVM中某线程的运行情况。 查看java进程的pid。(定位目标) 使用jmap查看JVM heap dump信息。(初步判断JVM资源使用情况) 通过top命令查看进程CPU使用情况 。 通过top名称查看进程...
  • 问题描述: cpu占用过高,服务器卡死,问题排查 ...3、使用 printf ‘%x\n’ PID (PID为上一步中获取到的线程号)转换成对应的16进制PID 5c7e(为什么要转换,因为用jstack工具导出的信息里面线程对应的nid是1
  • 篇文章掌握整个JVMJVM超详细解析!!!

    万次阅读 多人点赞 2020-03-30 17:23:10
    JVM先想想一些问题1 我们开发人员编写的Java代码是怎么让电脑认识的2 为什么说java是跨平台语言3 Jdk和Jre和JVM的区别4 为什么要学习JVM深入学习JVM1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area...
  • Java虚拟机(JVM)你只要看这篇就够了!

    万次阅读 多人点赞 2018-08-14 12:55:02
    1. Java 内存区域与内存溢出异常 ...字节码解释器工作是就是通过改变这计数器的值来选取下条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 如果线程正...
  • 每个运行的程序对应一个JVM实例 。每个java程序都运行在一个单独的JVM实例上,(new创建实例,存放在堆空间),所以说 一个java程序的多个线程,共享堆内存 。  什么是进程?     总的来说,操作系统的执行单元是...
  • JVM内存问题排查

    2021-01-09 08:38:55
    最近项目中出现了这样一个问题,有5台虚机上面运行着同样的微服务,每台机器都挂载着8-9个服务,其中一台不知道为什么就挂掉了,不是服务挂了,是机器挂了,shell连不上的那种。 初步诊断思路考虑是不是这台机器上的...
  • Jvm系列-Jvm概述(

    万次阅读 多人点赞 2020-11-07 20:15:55
    目录 1,什么是JVM? 2,JVM跨平台及原理 3,JVM的分类 4,JVM的位置 ...5,JVM的体系结构 ...跨平台:由Java编写的程序可以在不同的操作系统上运行:次编写,多处运行。 原理:编译之后的字节码
  • 还是一个一个Tomcat启动多个Web应用,Web应用都是一堆代码,而真正的JVM只有一个,就是Tomcat自己,然后Tomcat根据具体情况调用对应Web应用的代码。
  • jps:显示本机所有jvm进程 jps -q #只显示进程号 jps -l #显示主类全名或所在jar路径 jps -m #显示传给main类的参数信息 jps -v #显示进程启动时指定的jvm参数 jinfo:查看或设置java虚拟机参数 jinfo -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,392
精华内容 42,956
关键字:

一个进程对应一个jvm