linux jvm配置(linux jvm 设置)

linux

在Eclipse中怎么设置为使用JDK作为JVM?

不用设置了。一般 Eclipse有自带的,一定要设置的话,Eclipse->Windows->Preferences->Java->Installed JREs 其中有一项能引入jdk 路径(你安装JDK的那个bin文件夹)。

如何设置Docker容器中Java应用的内存限制?

如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例

docker run –rm -e JAVA_OPTS=’-Xmx512m’ tomcat:8

在日志中,我们可以清楚地发现设置已经生效 “Command line argument: -Xmx512m”

02-Apr-2016 12:46:26.970 INFO org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32

02-Apr-2016 12:46:26.974 INFO org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC

02-Apr-2016 12:46:26.975 INFO org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0

02-Apr-2016 12:46:26.975 INFO org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux

02-Apr-2016 12:46:26.975 INFO org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.1.19-boot2docker

02-Apr-2016 12:46:26.975 INFO org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64

02-Apr-2016 12:46:26.975 INFO org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre

02-Apr-2016 12:46:26.976 INFO org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00

02-Apr-2016 12:46:26.976 INFO org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation

02-Apr-2016 12:46:26.977 INFO org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat

02-Apr-2016 12:46:26.977 INFO org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat

02-Apr-2016 12:46:26.978 INFO org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

02-Apr-2016 12:46:26.978 INFO org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

02-Apr-2016 12:46:26.978 INFO org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m

然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制:

1. 限制容器使用的内存的最大量,防止对系统或其他应用造成伤害

2. 能够将Docker容器调度到拥有足够空余的内存的节点,从而保证应用的所需运行资源

关于容器的资源分配约束,Docker提供了相应的启动参数

对内存而言,最基本的就是通过 -m参数来约束容器使用内存的大小

-m, –memory=””

Memory limit (format: <number>). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.

那么问题就来了,为了正确设置Docker容器内存的大小,难道我们需要同时传递容器的内存限制和JAVA_OPTS环境变量吗? 如下所示:

docker run –rm -m 512m -e JAVA_OPTS=’-Xmx512m’ tomcat:8

这个方法有两个问题

1. 需要管理员保证容器内存和JVM内存设置匹配,否则可能引发错误

2. 当对容器内存限制调整时,环境变量也需要重新设定,这就需要重建一个新的容器

是否有一个方法,可以让容器内部的JVM自动适配容器的内存限制?这样可以采用更加统一的方法来进行资源管理,简化配置工作。

大家知道Docker是通过CGroup来实现资源约束的,自从1.7版本之后,Docker把容器的local cgroups以只读方式挂载到容器内部的文件系统上,这样我们就可以在容器内部,通过cgroups信息来获取系统对当前容器的资源限制了。

我创建了一个示例镜像 registry.aliyuncs.com/denverdino/tomcat:8-autoheap

,其源代码可以从Github 获得。它基于Docker官方Tomcat镜像创建,它的启动脚本会检查CGroup中内存限置,并计算JVM最大Heap size来传递给Tomcat。其代码如下

#!/bin/bash

limit_in_bytes=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)

# If not default limit_in_bytes in cgroup

if

then

limit_in_megabytes=$(expr $limit_in_bytes / 1048576)

heap_size=$(expr $limit_in_megabytes – $RESERVED_MEGABYTES)

export JAVA_OPTS=”-Xmx${heap_size}m $JAVA_OPTS”

echo JAVA_OPTS=$JAVA_OPTS

fi

exec catalina.sh run

说明:

为了监控,故障排查等场景,我们预留了部分内存(缺省64M),其余容器内存我们都分配给JVM的堆。

这里没有对边界情况做进一步处理。在生产系统中需要根据情况做相应的设定,比如最大的堆大小等等。

现在我们启动一个tomcat运行在512兆的容器中

docker run -d –name test -m 512m registry.aliyuncs.com/denverdino/tomcat:8-autoheap

通过下列命令,从日志中我们可以检测到相应的JVM参数已经被设置成 448MB (512-64)

docker logs test

02-Apr-2016 14:18:09.870 INFO org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx448m

我们也可以方便的调整Java应用的内存.

Docker 1.10提供了对容器资源限制的动态修改能力。但是由于JVM无法感知容器资源修改,我们依然需要重启tomcat来变更JVM的内存设置,例如,我们可以通过下面命令把容器内存限制调整到1GB

docker update -m 1024m test

docker restart test

再次检查日志,相应的JVM Heap Size最大值已被设置为960MB

docker logs test

02-Apr-2016 14:21:07.644 INFO org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx960m


linux Jni调用so文件建了测试WebProject写了一个servlet执行调用,一启动tomcat jvm崩溃了,错误日志如下?

建议你在linux底下编译so加-g选项,然后gdb java,进去以后可以b c函数名来设置断点,单步调试。或者生成core文件 ,再gdb java core看看崩溃堆栈上下文。推荐第一种方式。

any100参数设置?

数设置

1、修改启动时内存参数、并指定JVM时区 (在windows server 2008 下时间少了8个小时):

在Tomcat上运行j2ee项目代码时,经常会出现内存溢出的情况,解决办法是在系统参数中增加系统参数:

window下, 在catalina.bat最前面:

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

一定加在catalina.bat最前面。

linux下,在catalina.sh最前面增加:

JAVA_OPTS=”-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai”

注意:前后二者区别,有无set,有无双引号。

2、线程池配置(Tomcat6下)

使用线程池,用较少的线程处理较多的访问,可提高tomcat处理请求的能力。使用方式:

首先。打开/conf/server.xml,增加

<Executor name=”tomcatThreadPool” namePrefix=”catalina-exec-“

maxThreads=”500″ minSpareThreads=”20″ maxIdleTime=”60000″ />

最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。

然后,修改<Connector …>节点,增加executor属性,如:

<Connector executor=”tomcatThreadPool”

port=”80″ protocol=”HTTP/1.1″

connectionTimeout=”60000″

keepAliveTimeout=”15000″

maxKeepAliveRequests=”1″

redirectPort=”443″

……/>

注意:可以多个connector公用1个线程池。

3、调整连接相关Connector的参数:

<Connector executor=”tomcatThreadPool”

port=”80″ protocol=”HTTP/1.1″

connectionTimeout=”60000″

keepAliveTimeout=”15000″

maxKeepAliveRequests=”1″

redirectPort=”443″

maxHttpHeaderSize=”8192″ URIEncoding=”UTF-8″ enableLookups=”false” acceptCount=”100″ disableUploadTimeout=”true”/

Published by

风君子

独自遨游何稽首 揭天掀地慰生平