「java资源限制」限制java占用的最大内存
本篇文章给大家谈谈java资源限制,以及限制java占用的最大内存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、javaweb项目编译很慢
- 2、如何减少Docker中的Java内存消耗
- 3、java商城项目怎么讲
- 4、java影响数据处理的速度有哪些
- 5、Java web怎么限制同一个ip(或mac地址)访问网站,查询资源次数的?
- 6、如何设置Docker容器中Java应用的内存限制
javaweb项目编译很慢
,原因可能是因为:
1. 代码中有大量的重复编译。
2. 编译时依赖的jar包太多,导致编译耗时长。
3. 项目中包含大量的编译错误,导致编译耗时长。
4. 编译时受到硬件资源限制,导致编译耗时长。
如何减少Docker中的Java内存消耗
最近在和阿里的一些同事谈起使用Docker部署Java应用的场景,其中一个大家普遍关心的问题就是如何设置容器中JVM的内存限制。
如果使用官方的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 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32
02-Apr-2016 12:46:26.974 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.1.19-boot2docker
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre
02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00
02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
02-Apr-2016 12:46:26.978 INFO [main] 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 [main] 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 [main] 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[unit]). 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 [ "$limit_in_bytes" -ne "9223372036854771712" ]
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 [main] 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 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx960m
...
java商城项目怎么讲
自己从零开始开发的话,开发时间长,耗费精力过多,且没有产品和开发经验的话,很难打造出优质的java电商商城。
不妨考虑通过合作系统源码服务商,来打造java电商商城。便捷效率高,还可以定制化功能,让你的电商商城更符合你的需求。
我们的微服务架构的java商城系统还有以下优势:
1、资源管理
支持容器云、资源编排、资源限制、资源调度,满足企业对复杂资源规格的需求。功能点:容器云,资源编排,策略化部署。
2、稳定运维
提供容器、应用,两级监控。提供metric、logging、tracing,三类监控。功能点:多方位,全类别监控。
3、快速交付
提供DevOps完整工具链,满足敏捷开发、快速交付的需求。大大缩短了迭代周期,加快了部署速度,可以应对高速的需求变更。
4、核心功能
(1)微服务
通过服务切分,整合RPC服务资源,使用服务注册、服务发现、路由、网关、负载均衡、熔断等技术,实现微服务的语言无关性和高可用性。
(2)DevOps
打破研发、运维团队之间的障碍,提高协同工作效率;拥有适用于软件开发者的产品和解决方案,方便开发者快速、可靠地构建和交付产品。
(3)容器管理
通过容器化,让系统更轻量,更低成本,更高效率,实现更快速的交付和部署,更易于微服务架构的实现,智慧化资源编排,更简单的管理,负载均衡、弹性伸缩、日志监控、滚动升级等。
(4)应用监控
从metric、logging、tracing 三个维度全方位监控系统,精准定位,快速解决问题。
从稳定性、安全性、可拓展性等方面考虑,Java商城系统更能满足中大型企业的需求。从项目的长远发展考虑,系统的可持续性开发、电商公司的可持续维护则是重要参考标准。万米商云服务了超1000家中大型企业客户的电商平台搭建及数字化转型,成功交付率99.99%,既支持直接帮客户进行个性化定制开发的模式,也支持交付源码由企业自己的技术团队进行开发,我们提供技术支持的模式。
java影响数据处理的速度有哪些
?
1. 运行时间:Java程序的运行时间取决于它的编译器,虚拟机和硬件环境。如果编译器和虚拟机的性能较低,则Java程序的运行时间也会受到影响。
2. 计算能力:Java的计算能力受到硬件环境的限制,如果硬件资源不足,则Java程序的计算能力也会受到影响。
3. 内存使用:Java程序的内存使用受到硬件环境的限制,如果硬件资源不足,则Java程序的内存使用也会受到影响。
4. 编程语言:Java程序的编程语言受到程序员的技术水平和编程经验的限制,如果程序员的技术水平和编程经验不足,则Java程序的编程语言也会受到影响。
Java web怎么限制同一个ip(或mac地址)访问网站,查询资源次数的?
获取并保存IP,每次查询前,遍历IP,若相等,跳过查询,提示次数受限!
如何设置Docker容器中Java应用的内存限制
然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制: 1. 限制容器使用的内存的最大量,防止对系统或其他应用造成伤害 2. 能够将Docker容器调度到拥有足够空余的内存
java资源限制的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于限制java占用的最大内存、java资源限制的信息别忘了在本站进行查找喔。