解析Linux系统中JVM内存2GB上限的详解

我们通常使用的JVM都是32位的(64位的JVM会损失10-20%的性能,通常不建议使用),而32位程序的寻址空间应该是4GB才对,为什么Linux上的JVM内存只能使用2GB呢?

经过和JDK研发组的人员沟通,终于弄清楚了一些相关的原因。这个问题存在于早期的一些Linux版本中,特别是内核2.5以前的版本,2.6以后的版本就基本上没有这个问题了。原来这些Linux版本对进程有个对内存2GB的限制,是一个地址连续的内存块大小的上限,而JVM的堆空间(heap size)需要连续的地址空间,因此,2GB就是java进程的理论使用的内存上限。

如果java应用需要使用较大的内存,建议使用较新版本的linux,或者修改Linux的应用/内核内存比配置为3GB:1GB。还有就是选择如Solaris等的UNIX操作系统。象Solaris这样的操作系统,在JVM内存管理上没有2GB的限制,因此可以把heap size设置到3.5-3.6GB左右。

(0)

相关推荐

  • linux系统使用python获取内存使用信息脚本分享

    复制代码 代码如下: #!/usr/bin/env Python from __future__ import print_functionfrom collections import OrderedDict def meminfo():    ''' Return the information in /proc/meminfo    as a dictionary '''    meminfo=OrderedDict() with open('/proc/meminfo') as f:  

  • 使用python获取CPU和内存信息的思路与实现(linux系统)

    大家都知道,linux里一切皆为文件,在linux/unix的根目录下,有个/proc目录,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数).与其他文件系统不同,/proc 存在于内存而不是硬盘中.proc 文件系统提供的信息如下: •进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的

  • linux使用管道命令执行ps获取cpu与内存占用率

    复制代码 代码如下: #include <stdio.h>#include <unistd.h>int main(){    char caStdOutLine[1024]; // ps 命令的标准输出中的一行信息    char* pcTmp = NULL;      // 指向以空格拆分后的字符串 char caSelfPID[10];      // 自身进程的PID字符串    char caPSCmd[24];        // "ps aux | grep

  • linux中通过文件描述符获取文件绝对路径的方法

    在linux中,有时候我们只知道文件描述符却不知道它的名字及其完整的路径,如果我们想获取其路径该怎么办呢?其实很简单,在linux中每个被打开的文件都会在/proc/self/fd/目录中有记录,其中(/proc/self/fd/文件描述符号)的文件就是文件描述符所对应的文件.说道这里我们先停下了说一个函数: readlink(取得符号连接所指的文件) 相关函数 stat,lstat,symlink 表头文件 #include <unistd.h> 定义函数 int readlink (con

  • Linux和Windows中tomcat修改内存大小的方法

    其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置 实例,以下给出1G内存环境下java jvm 的参数设置参考: 复制代码 代码如下: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "JAVA_O

  • Linux内存描述符mm_struct实例详解

    Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起.(所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context.其中有一个被称为'内存描述符'(memory descriptor)的数据结构mm_struct,抽象并描述了Linux视角下管理进程地址空间的所有信息

  • 手动释放Linux服务器内存(具体操作步骤)

    在服务器运行过程中,使用free -m查看服务器内存时,经常会发现free值很小,有些同学就会很紧张,总想采取一些措施,使得free值看起来高一点,心里就比较爽一点.其实,个人觉得这完全是图一时之快,没什么实质性用途. 一.大众释放内存方法1. 首先使用free -m查看剩余内存 复制代码 代码如下: linux-8v2i:~ # free -m             total       used       free     shared    buffers     cachedMem

  • linux 内存管理机制详细解析

    物理内存和虚拟内存我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念. 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space). 作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的

  • 解析Linux系统中JVM内存2GB上限的详解

    我们通常使用的JVM都是32位的(64位的JVM会损失10-20%的性能,通常不建议使用),而32位程序的寻址空间应该是4GB才对,为什么Linux上的JVM内存只能使用2GB呢? 经过和JDK研发组的人员沟通,终于弄清楚了一些相关的原因.这个问题存在于早期的一些Linux版本中,特别是内核2.5以前的版本,2.6以后的版本就基本上没有这个问题了.原来这些Linux版本对进程有个对内存2GB的限制,是一个地址连续的内存块大小的上限,而JVM的堆空间(heap size)需要连续的地址空间,因此,

  • Linux 系统 nginx 服务器安装及负载均衡配置详解

    nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器.邮件代理服务器以及通用的 TCP/UDP 代理服务器.其特点为轻量级(占用系统资源少).稳定性好.可扩展性(模块化结构).并发能力强.配置简单等. 本文主要介绍在测试环境中通过 nginx 实现基本的 负载均衡 功能. nginx 可以提供 HTTP 服务,包括处理静态文件,支持 SSL 和 TLS SNI.GZIP 网页压缩.虚拟主机.URL 重写等功能,可以搭配 FastCGI.uwsgi 等程序处理动态请求

  • Linux系统(CentOS7安装)安装JDK8的教程详解

    JDK 的安装 系统安装就不做过多介绍,大家从网上寻找安装步骤进行安装,不过我推荐大家进行安装时选择桌面图形化格式进行安装,方便做一部分操作,同时在安装过程中选择英文模式,同时我自己在安装的过程中发现使用Oracle VM VirtualBox这个虚拟机工具比使用VM工具开发更加方便些 使用工具 系统:CentOS7_64位(推荐使用最小配置命令窗口) Jdk:jdk1.8.0_191 虚拟机:Oracle VM VirtualBox 文档编写工具:EditPlus 文件传输工具:FileZil

  • Linux 系统下安装JDK1.8的教程详解

    一,安装前的清理工作 rpm -qa | grep jdk rpm -qa | grep gcj yum -y remove java-xxx-xxx 二 , 在线下载JDK 命令: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b1

  • Linux系统下virtuoso数据库安装与使用详解

    最近在调研关联数据的一些东西,需要用到rdf数据库,所以接触了virtuoso数据库.安装的坑其实并不多,之前在windows 10上安过一次.这次在ubuntu 18.04上安装一下,其他的linux发行版安装的流程也差不多. virtuoso数据库的下载与使用 开源版本的virtuoso数据库可以在sourceforge下载.我用的是7.25版本.建议下载已经编译好的generic版本(下载图中标红色的那个),需要编译的那个版本我遇到了openssl版本不支持的问题. 下载完毕后将其解压到/

  • win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)

    先去网上把下面列表里的文件下载下来,百度一搜索到处都是~~~ 我来解释一下以上目录都是什么: instantclient-basic-win32-11.2.0.1.0.zip 这个文件是配置文件,现在先不解释,等下会用到. OraClient.zip 这个是oracle的客户端,我在安装的时候没有用到这个,这个可以不要. plsqldev1104.zip 这个是plsql客户端,安装很简单. win32_11gR2_database_1of2.zip win32_11gR2_database_2

  • 浅谈Linux系统中的异常堆栈跟踪的简单实现

    在Linux中做C/C++开发经常会遇到一些不可预知的问题导致程序崩溃,同时崩溃后也没留下任何代码运行痕迹,因此,堆栈跟踪技术就显得非要重要了.本文将简单介绍Linux中C/C++程序运行时堆栈获取,首先来看backtrace系列函数--使用范围适合于没有安装GDB或者想要快速理清楚函数调用顺序的情况 ,头文件execinfo.h int backtrace (void **buffer, int size); 该函数用来获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针

  • 详解Linux系统中Oracle数据库程序的启动和关闭方式

    在单机环境下,要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle Oracle数据库有以下几种启动方式: 1. startup nomount 非安装启动,这种方式启动下可执行:重建控制文件.重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2. startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档. 数据库介质恢复. 使数据文件联机或脱机, 重新

  • 基于Linux系统中查看硬件等信息的方法详解

    本文介绍下,linux下查看硬件信息的命令与方法,包括主板序列号.cpu信息.内存信息.硬盘信息.网卡信息等.1,主板信息.查看主板的序列号 #使用命令dmidecode | grep -i 'serial number'#查看板卡信息cat /proc/pci 2,cpu信息 #通过/proc文件系统1) cat /proc/cpuinfo#通过查看开机信息2) dmesg | grep -i 'cpu'#3)dmidecode -t processor3,在linux系统中查看硬盘信息,常用

  • linux系统中计划任务介绍

    目录 一.定制计划任务 二.同步时间 三.练习 四.安全问题 一.定制计划任务 1.atd服务(一次性) 1.atd服务对应的命令------>at 使用at命令时先要进行安装 [root@localhost lianxi]# yum install at -y 然后必须要起动atd服务,不然不会定时去执行任务的 [root@localhost lianxi]# service atd start Redirecting to /bin/systemctl start atd.service 案

随机推荐