开源还是商用,解密监控宝Docker监控实现原理

2019-09-11 16:05栏目:公司领导
TAG:

jvm系列(九):如何优化Java GC「译」,jvm

本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作。

Sangmin Lee发表在Cubrid上的”Become a Java GC Expert”系列文章的第三篇《How to Tune Java Garbage Collection》,本文的作者是韩国人,写在JDK 1.8发布之前,虽然有些地方有些许过时,但整体内容还是非常有价值的。译者此前也看到有人翻译了本文,发现其中有许多错漏生硬和语焉不详之处,因此决定自己翻译一份,供大家分享。

本文是“成为Java GC专家”系列文章的第三篇,在系列的第一篇文章《理解Java GC》中,我们了解到了不同GC算法的执行过程、GC的工作原理、新生代和老年代的概念、JDK 7中你需要了解的5种GC类型以及每一种GC对性能的影响。

在系列的第二篇文章《如何监控Java GC》中笔者已经解释了JVM进行实时GC的原理、监控GC的方法以及可以使这一过程更加迅速高效的工具。

在第三篇文章中,笔者将基于实际生产环境中的案例,介绍几个GC优化的最佳参数设置。在此我们假设你已经理解了本系列前两篇文章的内容,因此为了更深入的理解本文所讲内容,我建议你在阅读本篇文章之前先仔细阅读这两篇文章。

【干货】解密监控宝Docker监控实现原理

分享人高驰涛(Neeke),云智慧高级架构师,PHP 开发组成员,同时也是 PECL/SeasLog 的作者。8 年研发管理经验,早期从事大规模企业信息化研发架构,09 年涉足互联网数字营销领域并深入研究架构与性能优化。2014 年加入云智慧,致力于 APM 产品的架构与研发。崇尚敏捷,高效,GettingReal。

图片 1

2015年9月,企业级应用性能监控和管理服务商云智慧正式上线了Docker监控功能,能够实时监控Docker容器的CPU、内存、网络流量及Swap状态,让开发者和运维人员在使用Docker时清晰掌握其资源消耗状况。

图片 2

作为国内首家实现Docker监控的SaaS厂商,监控宝Docker监控的技术原理是什么?相对国外的Docker监控产品有何优势?以下是此次分享的实录,请听Neeke细说端详:

1、Docker监控概况

在云时代,仍有大量物理机直接支持服务,相较于虚拟技术来讲,这种方式已经落伍很多,于是各种开源容器技术大大推进了虚拟化技术的发展。

Docker容器相较于其他容器技术来讲,是比较新的,而且发展最为迅速。原因不用多说,背后有老大哥谷歌撑腰。国内也已经兴起了几个以Docker为核心技术的创业公司,比如云智慧的合作伙伴数人、DaoCloud,都是前景非常赞的公司。

虽然这么火热,但关于Docker的运维一直是个痛点。

可以说,目前全球只有两家APM厂商提供了基于SaaS的Docker运维监控,其一是美国APM厂商New Relic,他们在6月下旬正式发布了Docker监控;另一家,则是中国APM厂商云智慧CloudWise,在继New Relic之后的9月7日,发布上线了Docker监控。从某种意义上讲,CloudWise填补了国内Docker监控的SaaS服务空白。

2、Docker监控的工作原理

大家都知道,CloudWise在APM领域率先提出了端到端的一体化监控模型,并且在此模型上,发布了技术领先、便于部署和管理的SmartAgent软件架构。此次Docker监控的实现,也是基于SmartAgent的架构来完成的。

SmartAgent以部署的快捷高效和智能化见长,整个部署过程中,用户在两分钟内便可完成。部署分为两部,首先下载、解压、启动数据发送代理SendProxy。SendProxy的作用是提供一个高效的本地数据接收队列与数据发送引擎,并且可以在局域网内进行分布式部署,使得不能上网的机器监控也可正常地通过SendProxy高效地传输到云智慧的SaaS平台。其次,下载、解压、启动DockerAgent。

DockerAgent使用Python进行开发并完成编译,目前支持Ubuntu和CentOS。DockerAgent遵循了SmartAgent的插件规范,所以,无论监控宝或透视宝用户,都可以直接使用。

DockerAgent有三个线程,分别是:DockerProcess DockerConfig DockerPing,以及一个对象Task。三个线程各司其职,同时受Task对象控制。Task中核心属性是任务惟一标识、任务状态以及任务频率。这些属性由DockerConfig与ClouwWise云平台定时同步。

当任务状态正常时,DockerProcess线程开始采集数据,并遵守频率规范。DockerPing负责心跳检测,定时产生心跳数据。这些数据,都由DockerAgent交由SendProxy,并由SendProxy存储进入队列,并异步地推送至CloudWise云平台。

前面聊到DockerAgent插件遵守了SmartAgent的插件规范,所以它像其他插件一样,包含了 bin 、conf、lib、log等目录,并存在一个启动脚本。该脚本提供了start 、stop、status等命令。

以上是DockerAgent的介绍,后续SmartAgent的架构与插件规范将会陆续开源发布,届时热衷开源与监控的同学,都可以直接参与进来。3、DockerAgent数据采集原理

下面我们聊一下DockerAgent采集数据的原理。DockerAgent首先会使用docker info命令来获取docker系统信息,这些信息包含了非常有用的数据,如: Containers, Images, Name, CPUs, Data Space Used, Data Space Total, Total Memory。

这些数据看似简单基础,但却可以解脱掉Docker运维同学每天重复N次的工作。其次会使用docker version来检测docker版本,目前我们的DockerAgent仅支持1.15以上的Docker版本。

图片 3

然后,使用dockerps命令来取得容器的运行信息和容器id,容器name,此时便可获知在此台机器上正在运行的docker容器都有哪些。

最后,依次取得这些docker容器的性能指标。取得性能指标的方式,有部分使用docker原生接口,有部分是运行云智慧自己的算法。其中包含容器与主机的系统时区/时间;容器的cpu使用率(通过cgroup/cpuacct内该容器的cpuacct.stat取得);容器的ip;容器内运行的进程数;容器的内存指标,rsscachememory_limittotal_cwop等(通过cgroup/memory内该容器的 memory.stat取得);容器的网络指标(通过ifconfig/ statistics取得)。DockerAgent发布上线以后,在当天就接到了非常多热心用户的反馈。很多反馈非常好,我们也在积极地吸收和改进。为大家解决真正头疼的Docker运维、监控、管理问题。相信在很短的时间内,将迭代出更优秀、更稳定、更符合用户预期的DockerAgent,以此不仅填补国内的Docker监控空白,更会真正成为众多Docker用户、企业的伙伴,为大家解决真正头疼的Docker运维、监控问题。

问:咱们和datadog之类docker监控有啥区别和优势?

答:DataDog的安装部署太过繁琐。当时尝试时用了一下午才跑出来数据。DataDog的图表定义比较自由,这点是比较好的;而我们的 Docker监控最大的优势,就是零基础部署。另外,DataDog太贵,好像一个Agent要接近100人民币吧。目前CloudWise的 DockerAgent完全免费。

问:刚才说 docherconfig 是定时与云平台同步,同步的是docker process和docker ping采集到的数据吗?

答:不是同步采集到的数据,是同步配置。

问:我看讲的是通过sendproxy异步到云平台的啊,那么dockerconfing的作用是什么?

答:DockerConfig是定时从云平台取得配置信息,采集到的数据,是由DockerProcess与DockerPing自行交由SendProxy。同步的数据其实就是Task的属性,比如任务名、任务频率、任务状态。

问:采集数据原理是先ps命令机器上那些 docker容器,再去用docker info获得他们的指标吗?

答:dockerinfo是返回当前机器上整体的docker指标,然后ps取得活着的docker容器,依次取它们各自的指标。

问:那包括了ps命令出的docker吗?ps直接就取了吗?这么说ps不仅仅是获取那些活的docker容器,还包括他们指标?

答:ps取不到指标,取得的是活的容器并列举;然后用其他的方法取它们的指标。容器名字也是ps时列举时一起取得的。

以上是Neeke就监控宝Docker监控的实现原理进行的分享,大家可以注册监控宝进行免费试用,有任何问题或需求请与我们联系。

分享人高驰涛(Neeke),云智慧高级架构师,PHP 开发组成员,同时也是 PECL/SeasLog 的作者。8 年研发管理...

开源还是商用?十大云运维监控工具横评

随着云计算和互联网的高速发展,大量应用需要横跨不同网络终端,并广泛接入第三方服务(如支付、登录、导航等),IT系统架构越来越复杂。快速迭代的产品需求和良好的用户体验,需要IT运维管理者时刻保障核心业务稳定可用,而企业运维中的痛点和难点也急需解决。

1、面向业务的运维,不但关心单点IT资源的运行状态,更关心整个业务系统的健康状态

2、如果企业使用了大量的API和模块化应用,那么关注每个接口的性能变化情况和指标

3、对于运维主管及企业管理层来说,特别需要上墙的监控大屏

4、运维需要每周、每月查看报告趋势分析,但传统运维工具数据导出困难

5、需要第一时间转雀和快速发现故障节点,减少业务中断带来的损失

云智慧对业内主流的开源运维监控系统和商业运维监控系统进行对比,分析各种产品的定位、目标用户和功能特点,希望帮助广大运维、开发和创业者找到最适合自己的运维工具。

开源运维监控产品篇

  Zabbix

推荐星级:★★★★★

Zabbix是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源运维平台,也是目前国内互联网用户中使用最广的监控软件,云智慧遇到的85%以上用户在使用Zabbix做监控解决方案。

图片 4

入门容易、上手简单、功能强大并且开源免费是云智慧对Zabbix的最直观评价。Zabbix易于管理和配置,能生成比较漂亮的数据图,其自动发现功能大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户灵活进行数据采集,而分布式系统架构可以支持监控更多的设备。理论上,通过Zabbix提供的插件式架构,可以满足企业的任何需求。

用户群:85%以上的泛互联网企业。

优点:

1.  支持多平台的企业级分布式开源监控软件

2.  安装部署简单,多种数据采集插件灵活集成

3.  功能强大,可实现复杂多条件告警,

4.  自带画图功能,得到的数据可以绘成图形

5.  提供多种API接口,支持调用脚本

6.  出现问题时可自动远程执行命令(需对agent设置执行权限)

缺点:

1.  项目批量修改不方便

2.  社区虽然成熟,但是中文资料相对较少,服务支持有限;

3.  入门容易,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发,难度较大;

4.  系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐;

5.  缺少数据汇总功能,如无法查看一组服务器平均值,需进行二次开发;

6.  数据报表需要特殊二次开发定义;

  Nagios

推荐星级:★★★★☆

Nagios是一款开源的企业级监控系统,能够实现对系统CPU、磁盘、网络等方面参数的基本系统监控,以及SMTP,POP3,HTTP,NNTP等各种基本的服务类型。另外通过安装插件和编写监控脚本,用户可以实现应用监控,并针对大量的监控主机和多个对象部署层次化监控架构。

图片 5

Nagios最大的特点是其强大的管理中心,尽管其功能是监控服务和主机的,但Nagios自身并不包括这部分功能代码,所有的监控、告警功能都是由相关插件完成的。

用户群:适合复杂IT环境的企业

优点:

1.  出错的服务器、应用和设备会自动重启,自动日志滚动

2.  配置灵活,可以自定义shell脚本,通过分布式监控模式

3.  支持以冗余方式进行主机监控,报警设置多样

4.  命令重新加载配置文件无需打扰Nagios的运行

缺点:

1.  事件控制台功能很弱,插件易用性差

2.  对性能、流量等指标的处理不给力

3.  看不到历史数据,只能看到报警事件,很难追查故障原因

4.  配置复杂,初学者投入的时间、精力和成本比较大

Ganglia

推荐星级:★★★★☆

Ganglia是加州大学伯克利分校发起的一个开源集群监控项目,设计之初是用于监控数以千计的网络节点。Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统。它已被广泛移植到各种操作系统和处理器架构上。

图片 6

用户群:适用于大型服务器集群用户。

优点:

1.  适合监控系统性能,通过曲线很容易见到每个节点的工作状态

2.  可以自定义监控项,监控展示有表格和图像两种,支持手机版

3.  部署方便,通过不同的分层管理上万台机器,无需逐个添加配置

缺点:

1.  没有内置的消息通知系统

2.  没有报警机制,出现问题不能够及时报警

  Zenoss

推荐星级:★★★★☆

Zenoss Core是Zenoss的开源版本,其商用版本为ZenossEnterprise。作为企业级智能监控软件,Zenoss Core允许IT管理员依靠单一的WEB控制台来监控网络架构的状态和健康度。Zenoss Core的强大能力来自于深入的列表与配置管理数据库,以发现和管理公司IT环境的各类资产。Zenoss同时提供与CMDB关联的事件和错误管理系统,以协助提高各类事件和提醒的管理效率。

图片 7

优点:

1.  Zenoss比较出色的地方在于它的Dashboard,可以配置很多portlet

2.  每个用户的界面都是分开管理的,自定义dashboard不会影响其他用户

3.  强大监控功能支持服务器、路由交换、防火墙、存储、数据库、中间件监控

4.  采用基于HBASE的opentsdb存储任意时间段的数据

5.  将状态监控,性能监控,资源管理,良好的报告机制进行有机的整合

缺点:

1.  对资源要求较高,即使只管理少数几台设备,也需要消耗大量硬件及内存等附加资源。

2.  针对windows系统,开源版只提供SNMP,通过WMI检测CPU,Disk,软硬件和性能只在收费版提供。

  Open-falcon

推荐星级:★★★☆☆

Open-falcon是小米运维团队从互联网公司的需求出发,根据多年的运维经验,结合SRE、SA、DEVS的使用经验和反馈,开发的一套面向互联网的企业级开源监控产品。

图片 8

  Open-falcon架构

用户群:目前有几十家企业用户不同程度使用。

优点:

1.  自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持

2.  支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询

3.  高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用

4.  单机支撑200万metric的上报、归档、存储

5.  采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据

6.  多维度的数据展示,用户自定义Screen

7.  通过各种插件目前支持Linux、Windows、Mysql、Redis、Memache、RabbitMQ和交换机监控。

缺点:由于发布时间较短,很多基础的服务监控插件(如Tomcat、apache等)还不支持,很多功能还在不断完善中,另外由于缺少专门的支持,虽然有开放社区,但是解决问题的效率相对较低。

商用运维监控系统篇

  监控宝

推荐星级:★★★★★

监控宝是云智慧为用户提供IT性能监控(IT Performance Monitoring)的SaaS产品,包含网站监控、服务器监控、中间件监控、数据库监控、应用监控、API监控和页面性能监控等功能。包含免费版、畅享版和企业版,目前用户约40万,监控宝app也是国内唯一提供移动监控服务的产品。

图片 9

用户群:覆盖电子商务、移动互联网、广告传媒、在线游戏、教育医疗等行业的几十万用户,小米、陌陌、高德、用友、金山、途牛、聚美优品、陆金所、中国平安、建行信用卡中心、春雨医生、畅游、国家电网、中国电信、滴滴打车、春秋航空、凤凰网等各行业领先企业和中国互联网百强企业超过30%在使用监控宝。

优点:

作为国内最早提供基于SaaS服务的网络监控平台,监控宝不但为初级用户提供免费的标准服务,企业用户还可以按需购买所需的监控、告警资源,最大限度的节省企业运维成本;

监控宝通过遍布全球的300多个分布式监测节点,对网络进行稳定性和可用性的主动监控和实时分析,支持http(https)、ftp、ping、udp、tcp、smtp、traceroute等多种协议,测量CDN效果及DNS状态,全网全地域性能趋势分析。

实时捕捉服务器深层性能指标,支持Linux/Unix/Windows系统及云平台,支持CPU使用率、CPU平均负载、内存使用比例、磁盘IO、磁盘空间使用率、网络流量和系统进程数统计等物理指标及30多种应用服务,云主机监控端一键开启,无需复杂配置。对于应用服务的监控,监控宝已经支持常见的应用类型包括:Apache、Lighttpd、Nginx、Tomcat、IIS、Memcache和Redis,存储层监控支持Hadoop、MySQL、MongoDB、SQLServer、Oracle的健康状态及性能监控。

监控宝是国内目前唯一支持API监控的网络监控产品,通过API接口调用模拟用户使用过程,支持对get、post、put、delete、head、options六种请求方式进行实时监控;支持JSON、XML、Text、Response Status验证及Postman脚本导入。

Docker监控也是监控宝的独家功能,能够实时监控Docker容器的CPU、内存、网络流量及Swap状态,让开发者和运维人员在使用Docker时清晰掌握其资源消耗状况。

监控宝提供页面性能管理,基于国际标准制定页面性能指数,识别加载元素的状态及正确性,对全网全用户加载响应时间分析,同时准确定位问题元素及优化建议。

及时有效的告警通知对运维来说至关重要,监控宝可以根据SLA设置告警阈值,第一时间发送告警通知。监控宝覆盖最全面的告警通知方式:电子邮件、短信、电话语音、URL回调通知、App Push等。另外监控宝提供分级告警通知,能够根据告警事件的不同等级将不同的告警推送给不同的人员,支持企业分层管理!

监控宝目前对其Smart Agent进行了开源,用户可以根据业务需求定制化开发Agent,同时用户的数据安全得到保障。

监控宝提供私有化部署解决方案,满足政企、金融行业专有网络监控的需求。

来自Compuware、CA、IBM等企业IT服务资深专家,超过5年的本土化企业级SaaS服务经验,以及超过百人的技术服务团队,为用户提供最佳的服务保障。

  360网站服务监控

推荐星级:★★☆☆☆

360网站服务监控是一款面向广大站长的网站监控产品,提供免费的网站、服务器监控。

图片 10

用户群:个人站长

优点:

服务免费,支持网站HTTP监控、PING监控、域名DNS监控和服务器监控

提供网站访问全景数据和简单配置信息

缺点:

只支持简单的网站和服务器监控,历史数据保留15天,且免费监控点数量仅为四个

最后一次产品更新是2014年9月,目前已停止更新和运营支持

阿里云监控

推荐星级:★★★★☆

阿里云监控是一款免费网站监控产品,可监控站点和服务器,并提供多种告警方式:短信,旺旺,邮件。

图片 11

用户群:阿里云用户

优点:

与阿里云服务捆绑紧密,允许用户自定义数据监控

阿里云多IDC间内网数据传输,不占用客户公网资源

支持对业务数据的通用统计,从各个角度反应服务的运行情况

缺点:

所有服务基于阿里云,功能单一,扩展性差

功能不够强大,只能满足基础监控需求

  百度云观测

推荐星级:★★☆☆☆

百度云观测是百度推出的一款云服务产品,类似于360云监控、阿里云监控,主要是为站长提供免费的一站式网站监测、预警服务,功能覆盖网站运行状况、安全和访问速度等多个方面。

图片 12

用户群:个人站长

优点:

对于用户每日访问的站点进行安全检测

国内各大城市云节点覆盖,支持CDN、DNS状态和主机监控

缺点:

需要进行网站认证

监控点少,功能简单,只能监测网站状态,不支持服务器、应用监控。

  小蜜蜂网站监测

推荐星级:★☆☆☆☆

小蜜蜂网站监测是一款针对中小企业需求开发的综合测量网站运营情况线上工具,可以定时监控网站或服务器器的可用率(Uptime),一旦网站无法连结、或是服务器发生错误,即可发送告警通知。

图片 13

用户群:中小企业网站管理员

优点:

小蜜蜂通过探测节点和Last Mile两种模式监测网站可用性,支持多种站点监控类型和不同的网络访问传输协议;

提供多样化监控告警设置,并支持站内实时告警消息,支持RSS。

缺点:

只支持基本的网站监控,监控点不可选,监控服务不稳定;

网站性能历史数据不够详细,且无法导出。

随着新技术的不断发展,云服务已经互联网企业的必须,但是长期以来会存在传统物理主机和云主机、私有云和公有云并存的状态。此外,互联网企业的发展速度非常快,小米、滴滴出行等很多企业都是在短短几年内发展起来的,因此选择一款合适的云监控产品,伴随企业同步成长,是非常必要的。

随着云计算和互联网的高速发展,大量应用需要横跨不同网络终端,并广泛接入第三方服务(如支...

GC优化是必要的吗?

或者更准确地说,GC优化对Java基础服务来说是必要的吗?答案是否定的,事实上GC优化对Java基础服务来说在有些场合是可以省去的,但前提是这些正在运行的Java系统,必须包含以下参数或行为:

  • 内存大小已经通过-Xms-Xmx参数指定过
  • 运行在server模式下(使用-server参数)
  • 系统中没有残留超时日志之类的错误日志

换句话说,如果你在运行时没有手动设置内存大小并且打印出了过多的超时日志,那你就需要对系统进行GC优化。

不过你需要时刻谨记一句话:GC tuning is the last task to be done.

现在来想一想GC优化的最根本原因,垃圾收集器的工作就是清除Java创建的对象,垃圾收集器需要清理的对象数量以及要执行的GC数量均取决于已创建的对象数量。因此,为了使你的系统在GC上表现良好,首先需要减少创建对象的数量。

俗话说“冰冻三尺非一日之寒”,我们在编码时要首先要把下面这些小细节做好,否则一些琐碎的不良代码累积起来将让GC的工作变得繁重而难于管理:

  • 使用StringBuilderStringBuffer来代替String
  • 尽量少输出日志

尽管如此,仍然会有我们束手无策的情况。XML和JSON解析过程往往占用了最多的内存,即使我们已经尽可能地少用String、少输出日志,仍然会有大量的临时内存(大约10-100MB)被用来解析XML或JSON文件,但我们又很难弃用XML和JSON。在此,你只需要知道这一过程会占据大量内存即可。

如果在经过几次重复的优化后应用程序的内存用量情况有所改善,那么久可以启动GC优化了。

笔者总结了GC优化的两个目的:

  1. 将进入老年代的对象数量降到最低
  2. 减少Full GC的执行时间

将进入老年代的对象数量降到最低

除了可以在JDK 7及更高版本中使用的G1收集器以外,其他分代GC都是由Oracle JVM提供的。关于分代GC,就是对象在Eden区被创建,随后被转移到Survivor区,在此之后剩余的对象会被转入老年代。也有一些对象由于占用内存过大,在Eden区被创建后会直接被传入老年代。老年代GC相对来说会比新生代GC更耗时,因此,减少进入老年代的对象数量可以显著降低Full GC的频率。你可能会以为减少进入老年代的对象数量意味着把它们留在新生代,事实正好相反,新生代内存的大小是可以调节的。

降低Full GC的时间

Full GC的执行时间比Minor GC要长很多,因此,如果在Full GC上花费过多的时间(超过1s),将可能出现超时错误。

  • 如果通过减小老年代内存来减少Full GC时间,可能会引起OutOfMemoryError或者导致Full GC的频率升高。
  • 另外,如果通过增加老年代内存来降低Full GC的频率,Full GC的时间可能因此增加。

因此,你需要把老年代的大小设置成一个“合适”的值

影响GC性能的参数

正如我在系列的第一篇文章《理解Java GC》末尾提到的,不要幻想着“如果有人用他设置的GC参数获取了不错的性能,我们为什么不复制他的参数设置呢?”,因为对于不用的Web服务,它们创建的对象大小和生命周期都不相同。

举一个简单的例子,如果一个任务的执行条件是A,B,C,D和E,另一个完全相同的任务执行条件只有A和B,那么哪一个任务执行速度更快呢?作为常识来讲,答案很明显是后者。

Java GC参数的设置也是这个道理,设置好几个参数并不会提升GC执行的速度,反而会使它变得更慢。GC优化的基本原则是将不同的GC参数应用到两个及以上的服务器上然后比较它们的性能,然后将那些被证明可以提高性能或减少GC执行时间的参数应用于最终的工作服务器上。

下面这张表展示了与内存大小相关且会影响GC性能的GC参数

表1:GC优化需要考虑的JVM参数

类型 参数 描述
堆内存大小 -Xms 启动JVM时堆内存的大小
-Xmx 堆内存最大限制
新生代空间大小 -XX:NewRatio 新生代和老年代的内存比
-XX:NewSize 新生代内存大小
-XX:SurvivorRatio Eden区和Survivor区的内存比

笔者在进行GC优化时最常用的参数是-Xms,-Xmx-XX:NewRatio-Xms-Xmx参数通常是必须的,所以NewRatio的值将对GC性能产生重要的影响。

有些人可能会问如何设置永久代内存大小,你可以用-XX:PermSize-XX:MaxPermSize参数来进行设置,但是要记住,只有当出现OutOfMemoryError错误时你才需要去设置永久代内存。

还有一个会影响GC性能的因素是垃圾收集器的类型,下表展示了关于GC类型的可选参数(基于JDK 6.0):

表2:GC类型可选参数

GC类型 参数 备注
Serial GC -XX:+UseSerialGC
Parallel GC -XX:+UseParallelGC-XX:ParallelGCThreads=value
Parallel Compacting GC -XX:+UseParallelOldGC
CMS GC -XX:+UseConcMarkSweepGC-XX:+UseParNewGC-XX:+CMSParallelRemarkEnabled-XX:CMSInitiatingOccupancyFraction=value-XX:+UseCMSInitiatingOccupancyOnly
G1 -XX:+UnlockExperimentalVMOptions-XX:+UseG1GC 在JDK 6中这两个参数必须配合使用

除了G1收集器外,可以通过设置上表中每种类型第一行的参数来切换GC类型,最常见的非侵入式GC就是Serial GC,它针对客户端系统进行了特别的优化。

会影响GC性能的参数还有很多,但是上述的参数会带来最显著的效果,请切记,设置太多的参数并不一定会提升GC的性能。

GC优化的过程

GC优化的过程和大多数常见的提升性能的过程相似,下面是笔者使用的流程:

1.监控GC状态

你需要监控GC从而检查系统中运行的GC的各种状态,具体方法请查看系列的第二篇文章《如何监控Java GC》

版权声明:本文由ag真人发布于公司领导,转载请注明出处:开源还是商用,解密监控宝Docker监控实现原理