Xms初始化堆的大小-XmxJVM堆堆怎么办

-Xms

JVM 初始化堆大小

-Xmx

最大JVM堆

这两个值的大小一般根据需要设置。初始化堆的大小实现了虚拟机启动时向系统申请的内存大小。一般来说,这个参数并不重要。但是一些应用程序在重负载下会急剧占用更多的内存。这时候这个参数就很重要了。如果在启动虚拟机时将虚拟机使用的内存设置的比较小,这种情况下的对象比较多。初始化时,虚拟机必须反复增加内存以满足使用。为此,我们一般将 -Xms 和 -Xmx 设置为相同的大小,最大堆大小受系统使用的物理内存限制。通常,使用大量数据的应用程序会使用持久化对象,内存使用量可能会快速增长。当应用需要的内存超过最大堆大小时,虚拟机会提示内存溢出,导致应用服务崩溃。因此,一般建议将最大堆大小设置为最大可用内存的 80%。

可以使用的默认内存是 128MB。在较大的应用程序中,这个内存是不够的,需要增加。

文件{}/bin/.bat下,Unix下,在文件{}/bin/.sh前添加如下设置:

=’-Xms[初始内存大小] -Xmx[可使用的最大内存]’

需要增加这两个参数的值。例如:

=’- -‘

表示初始内存为256MB,最大可使用内存为512MB。

另一个考虑是Java提供的垃圾收集机制。虚拟机的堆大小决定了虚拟机收集垃圾所花费的时间和频率。垃圾回收的可接受速度取决于应用程序,应通过分析实际垃圾回收时间和频率进行调整。如果堆大小很大,那么完全垃圾收集会很慢,但频率会降低。如果将堆大小与内存要求对齐,则完全收集会很快,但会更频繁。调整堆大小的目的是最小化垃圾收集时间,以便在特定时间内最大限度地处理客户请求。在基准测试中,为了保证最佳性能,必须将堆大小设置大,以确保整个基准测试过程中不发生垃圾回收。

如果系统花费大量时间收集垃圾,请减小堆大小。一次完整的垃圾回收不应超过 3-5 秒。如果垃圾收集成为瓶颈,则需要指定生成大小,检查垃圾收集的详细输出,并研究垃圾收集参数对性能的影响。一般来说,你应该使用 80% 的物理内存作为堆大小。添加处理器时记得增加内存,因为分配可以并行进行,垃圾回收不是并行的。

2.操作系统性能优化

这里所说的操作系统是指运行网络服务器的系统软件。当然,不同的操作系统是为不同的目的而设计的。例如,它是面向安全的,因此其内核中有很多限制以防止不同形式的服务攻击(格言是“默认是最安全的”)。这些限制可能更多地用于运行活动的网络服务器。

我们常用的Linux操作系统的目标是易用性,所以有更高的限制。使用 BSD 内核的系统有一个名为“”的内核,表示所有驱动器都静态连接到它。这使系统易于使用,但如果您想创建自定义内核来强制执行其中一些限制,则需要排除不必要的设备。 Linux 内核中的许多驱动程序都是动态加载的。但换句话说,内存变得越来越便宜,因此加载额外的设备驱动程序并不是很重要。重要的是拥有更多内存并释放服务器上更多可用内存。

温馨提示:虽然现在内存已经很便宜了,但是尽量不要买便宜的内存。虽然这些品牌的内存贵一些,但在可靠性方面,性价比会更高。

如果是在操作系统上使用,最好选择服务器版本。因为在非服务器版本中,终端用户授权的数量或者操作系统本身可以承载的用户数量、可用的网络连接数量,或者其他一些方面都是有限的。并且基于安全考虑,操作系统必须定期打上最新补丁。

3.与其他网络服务器集成

虽然也可以作为web服务器使用,但是对于静态html的处理速度没有那么快,作为web服务器的功能也差很多。因此,我们要整合并明确划分html和jsp的功能部分。让只处理jsp部分,其余由IIS等这些Web服务器处理,大大节省了有限的工作“线程”。

4.负载均衡

在负载均衡的思想下,多台服务器对称,每台服务器状态相同,可以独立提供服务,无需其他服务器的协助。通过负载分担技术,将外部发出的请求按照一定的规则以对称结构分布到某个服务器,接收请求的服务器独立响应客户端的请求。

一组提供服务的服务器组成一个应用服务器集群(),对外提供统一的地址。当向集群发送服务请求时,按照一定的规则选择一台服务器,将服务转发给该服务器,即负载均衡。

通过应用负载均衡技术,应用服务可以超越一台服务器只能为有限数量的用户提供服务的限制,可以使用多台服务器同时为大量用户提供服务。当服务器出现故障时,负载均衡服务器会自动检测并停止向该服务器分发服务请求,其他正常工作的服务器会继续提供服务,从而保证服务的可靠性。

负载均衡的实现方式大概有四种:第一种是通过DNS,但只能实现简单的轮换分配,不能处理故障。二是如果是基于MS IIS,2003本身就有负载均衡服务,二是硬件方式,可以通过交换机或者专用的负载均衡设备的功能来实现。第四种是软件方式,通过负载均衡服务器安装软件来实现。使用Httpd作为负载均衡器,上面的第四种方式可以使用集群节点来实现。这种方法比较灵活,成本也比较低。另一个很大的好处是可以根据应用情况和服务器的情况采取一些策略。 四. 自我调整

本节将详细介绍一些加速实例运行的技巧和方法,无论是什么操作系统,什么类型的Java虚拟机。在某些情况下,您可能无法控制部署环境中的操作系统或 Java 虚拟机。在这种情况下,您需要逐行了解以下一些建议,但您应该使更改生效。我认为以下方法是调整性能本身的最佳方法。

1.禁用 DNS 查询

当web应用程序想要记录客户端的信息时,它也会记录客户端的IP地址或使用域名服务器查找机器名称并将其转换为IP地址。 DNS查询需要占用网络,包括从许多远程服务器或不工作的服务器获取相应IP的过程,会消耗一定的时间。为了消除DNS查询对性能的影响,我们可以通过修改.xml文件中的参数值来关闭DNS查询:

除非您需要连接到站点的每个HTTP客户端的机器名,否则我们建议您在生产环境中关闭DNS查询功能。机器名可以通过其他方式获得。这不仅节省了网络带宽、查询时间和内存,而且更小的流量会导致日志数据更少,这显然节省了硬盘空间。对于流量低的站点,禁用 DNS 查询可能不会产生高流量站点的效果,但这仍然是一个不错的策略。谁会看到一个低流量的网站一夜之间增加了流量?

2.调整线程数

另一个可以被应用程序的()控制的参数是为处理请求而创建的线程数。使用线程池加快处理请求的响应速度。在Java中,线程是程序运行时的路径,是一个可以在程序中独立运行的代码段,与其他控制线程无关。它们共享相同的地址空间。多线程帮助程序员编写高效的程序,最大限度地利用 CPU,将空闲时间保持在最低限度,并接受更多的请求。

,可以通过修改sum的值来控制线程数。这些值在安装后已经设置为默认值,已经足够使用了,但是这些值会随着站点的扩展而改变。服务器开始处理请求时创建的线程数应该足以处理少量负载。换句话说,如果一天内每秒只有5个点击事件,每个请求任务处理时间为1秒硬件负载均衡器 能不能同时带多个应用,那么提前将线程数设置为5个就足够了。但是当你的站点访问量很大时,就需要设置更大的线程数,指定为参数的值。该值还有一个上限,应该可以防止不可控的流量(或恶意服务攻击)导致超出虚拟机使用的内存大小。如果要增加并发连接数,应该同时增加这两个参数。 web允许的最大连接数也受操作系统内核参数设置的限制,一般在2000左右,Linux在1000左右。

调整这些参数后,见下表:

属性名称

说明

使用线程处理收到的每个请求。该值表示可以创建的最大线程数。

指定当处理请求的所有可用线程都被使用时,可以放入处理队列的请求数。超过此数量的请求将不被处理。

网络连接超时,单位:毫秒。设置为0表示永不超时,这个设置有隐患。通常可以设置为30000毫秒。

初始化期间创建的线程数。

一旦创建的线程超过这个值,不再需要的线程将被关闭。

最好的方法是设置几次并测试它以观察响应时间和内存使用情况。机器、操作系统或虚拟机的不同组合可能会有所不同,而且并非每个人的网站流量都相同,因此没有一刀切的解决方案来确定线程数的值。

3.加速JSP编译速度

当一个JSP文件第一次被访问时,它会被转换成Java源代码,然后编译成Java字节码。您可以控制使用哪个编译器。默认情况下,使用使用命令行 javac 的编译器。您也可以使用更快的编译器,但在这里我们将展示如何优化它们。

另一种方法不是对所有实现都使用JSP页面,而是使用一些不同的java模板引擎变量。显然这是一个重大决定,但事实证明,至少必须研究这种方法。如果想了解更多可以使用的模板语言,可以参考Jason和合著者合着的《Java》(O’出版)一书。

您可以在 4.0 中使用流行且免费的 Jikes 编译器。 Jikes 编译器的速度要归功于 Sun 的 Java 编译器。首先,您必须安装 Jikes(更多信息可访问),然后您需要在环境变量中设置包含系统运行时的 JAR 文件。安装Jikes后,还需要设置JSP编译使用Jikes,需要修改web.xml文件中的值:

jsp

组织….

打桩机。

/usr/local/jdk1.3.1-linux/jre/lib/rt.jar:

/usr/local/lib/java//.jar

3

在4.1(或更高版本)中,JSP编译由包含的Ant程序控制器直接执行。这听起来有点奇怪,但这是 Ant 意图的一部分。有一个 API 文档指导开发人员在不启动新 JVM 的情况下使用 Ant。这是使用 Ant 进行 Java 开发的一大优势。此外,这也意味着您现在可以在 Ant 中使用任何支持 javac 的编译方法。这是有关 Ant 手册的 javac 页面列表。使用方便,因为你只需要在名为””的元素中定义一个名称,并且值中有一个支持编译的编译器名称,示例如下:

jsp

组织….

吉克斯

3

Ant 可用的编译器

姓名

别名

调用的编译器

.1, .2

JDK 1.1/1.2

.3, .4

JDK 1.3/1.4

吉克斯

吉克斯

合资企业

– 来自 Java/J++ SDK 的行

KJC

科比

GCJ

gcj(作为 gcc 的一部分)

SJ

的Java

在自己的 JVM 中运行 或

因为JSP页面在第一次使用时已经编译好了,所以你可能想在更新新的JSP页面后立即编译它。事实上,这个过程是可以完全自动化的,因为可以确认新的JSP页面在生产服务器和测试服务器上运行是一样的。

在bin目录下有一个脚本叫jspc。它只运行翻译阶段,而不是编译阶段。使用它在当前目录中生成Java 源文件。它是调试 JSP 页面的强大工具。

您可以通过浏览器访问来确认编译结果。这样可以保证文件被转换成,编译后可以直接执行。这也准确地模拟了真实用户访问JSP页面,可以看到提供给用户的功能。也注意这最后一刻修改出现的bug并修改J

提供根据请求编译JSP页面的功能。例如,您可以在浏览器的地址栏中输入:8080//jsp/dates/date.jsp?=true,这将编译data.jsp,而不是执行它。这一招触手可及,是验证页面正确性的捷径。

4. 其他

我们之前提到过,操作系统使用一些限制性的方法来防止恶意服务攻击。它还提供设置以防止恶意攻击或禁止某些机器访问。

提供两个参数供您配置:和。

通过配置这两个参数,可以过滤请求中的主机或IP地址,允许或拒绝哪个主机/IP。同样,httpd 文件中的每个目录都有允许/拒绝指定。

例如,您可以将 Admin Web 设置为仅允许本地访问,如下所示:

allow=”127.0.0.1″ deny=””/>

如果没有指定允许的主机,那么匹配被拒绝主机的主机将被拒绝,其他一切都被允许。同样,如果未指定主机,则将允许与允许主机匹配的主机,其他所有主机均被拒绝。

五.容量规划

容量规划是在生产环境中使用时必须提及的另一个重要主题,以提高性能。如果你没有考虑到预期网络流量下的硬件和带宽,那么无论你如何进行配置更改和测试,都将无济于事。

这里对这里提到的容量计划做一个简单的定义:容量计划是指评估硬件、操作系统和网络带宽,确定应用服务的服务范围,寻找适合需求和软件特性的软硬件的活动. 因此,这里所说的软件不仅包括,还包括与之配套使用的任何第三方网络服务器软件。

如果您在购买软硬件或部署系统之前对容量规划一无所知,那么您将不知道现有的软硬件环境可以支持多少流量,更糟糕的是,直到您交付和部署了生产环境中的产品 当您意识到配置存在问题时,进行更改可能为时已晚。这时候只能增加硬件投入,增加硬盘容量,甚至购买更好的服务器。提前做好容量规划,就不会那么累了。

这里只介绍相关内容。

首先,为了确定使用机器的容量计划,您应该从以下列表项开始研究和计划:

1. 硬件

使用什么样的硬件系统?需要多少台电脑?使用一台大型机还是多台小型机?每台计算机上使用了多少个 CPU?使用了多少内存?使用什么样的存储设备,对I/O处理速度有什么要求?如何维护这些电脑?在这些硬件上运行不同的JVM有什么影响(比如IBM AIX系统只能运行在它设计的硬件系统上)?

2. 网络带宽

带宽使用限制是多少? Web 应用程序如何处理过多的请求?

3.服务器操作系统

哪种操作系统最适合站点服务器?哪个 JVM 最适合在某个操作系统上使用?比如JVM在这种系统上是否支持本地多线程和对称多处理?哪个系统使 Web 服务器更快、更稳定、更便宜。是否支持多个 CPU?

4.容量规划

以下描述了容量规划的步骤:

1) 量化负载。如果网站已经建立并运行,您可以使用前面介绍的工具来模拟用户访问来确定资源需求量。

2) 分析测试结果或测试过程中。需要知道那些导致负载过大或使用过多资源的请求硬件负载均衡器 能不能同时带多个应用,并将它们与其他请求进行比较,从而确定系统的瓶颈。例如:如果查询数据库需要很长时间,那么就需要考虑使用缓冲池来减少响应时间。

3) 确定最低性能标准。比如,你不希望用户花20秒等待结果页面的返回,也就是说,即使达到访问限制,用户也不能等待超过20秒(从点击查看第一个返回数据的链接)。该时间包括数据库查询时间和文件访问时间。不同的公司可能对类似产品的性能有不同的标准。一般情况下,最好采用同行中最低的标准或对该标准进行评价。

4) 确定如何合理使用底层资源,并一一测试。底层资源包括CPU、内存、存储、带宽、操作系统、JVM等。在各种生产环境中依次部署和测试,观察是否满足要求。在测试中,尽量多使用JVM,并调整JVM用于测试的内存和线程池的大小。同时,为了达到充分、合理、稳定使用资源的效果,还需要处理测试过程中出现的硬件系统瓶颈,确定合理的资源分配。这个过程是最复杂的,一般因为没有参考价值,只能靠理论推论和经验总结。

5)如果通过步骤4的重复测试,达到最优组合,就可以将产品部署在同一个生产环境中。

另外,记得记录你的测试过程和结果,因为之后可能会有测试,以便你可以将之前的测试结果作为参考。此外,测试过程要重复多次,每次的条件可能不同。因此,可以比较结果,只有在记录后才能选择最佳条件。

这样,我们通过测试找到了最佳组合,合理配置了各种资源,大大提升了系统的性能。

六. 附加信息

显然,本文也很难全面详细地描述性能优化过程。如果多做研究,或许可以做更好的性能调优,比如Java程序的性能调优,操作系统的调优,各种复杂的环境和应用系统,以及其他所有与应用相关的东西。以下是文章中提到的一些资源、文章中提到的相关内容的链接以及本文中的一些参考资料。

1. Web 性能测试数据和工具

1) Wiki 主页,为开源 100% Java 开发的性能测试工具

2)使用说明

3)一些Java相关的测试工具介绍,包括可以与测试集成的工具

4) ® 是一种行业标准负载测试工具,可预测系统行为和性能。它通过模拟数千万用户的数据来测试整个企业架构,实现并发负载,帮助您更快地发现和发现问题。

2.文章介绍的相关内容介绍

1) 2.x + 4.x 用于负载均衡,描述如何使用jk配置集群负载均衡。

2)能力计划的制定,收集了很多网站能力计划制定的例子:

3) 测试负载均衡和集群,

4) 安装集成与集成章节

5) 性能测试工具研究,介绍性能测试工具的原理和思路

6) Java 内存泄漏

7) Web 服务器和应用服务器有什么区别?

8)详解数据库集群在性能上的问题

文章来源:https://www.it610.com/article/469175.htm

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容