问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

运维思考:Java进程管理规范

发布网友 发布时间:2024-09-15 08:15

我来回答

1个回答

热心网友 时间:2024-10-05 03:18

需求

无论是在springboot还是springcloud项目中,随着应用的不断增多,JVM参数的统一管理的重要性就会凸显出来,否则你可能会遇到几个问题:

Java进程出现性能问题,无GC日志支撑提供重要信息;

OOM异常频发,无法通过dump文件进行分析定位;

JVM堆内存设置规格不一致,被动等待出问题时发现;

作为运维,虽然没有超强的能力去最终的定位、分析、排查问题,但并不意味着我们就可以袖手旁观,那么我们能做什么呢?

首先,我们要知道Java进程默认参数启动并不会打印某些我们需要的日志,而是需要我们按需去设置的。

其次,即使开启了相应的日志参数,其统一输出位置就成了我们需要面对的问题,毕竟我们不希望满盘搜文件,浪费不必要的时间。

最后,各种个性化的JVM参数,无益于运维对数量为百、千级别进程的有效管理。

此时统一的Java进程管理规范就可以发挥作用,通过标准化部署,Java使用统一的JVM参数运行,一旦某个应用出现异常,我们可以快速收集各种异常日志提供给研发进一步定位问题。

最终目标是,运维能提供给研发的有效信息,肯定是排除了因环境差异、参数配置差异等这些低级别干扰因素的,这样才能保证运维和研发的快速定位。

进程规范1.GC日志

GC日志是用来描述JAVA虚拟机垃圾回收情况,主要用来快速定位潜在的内存故障和性能瓶颈。默认情况下是关闭的,我们需要通过参数设置启用。

参数格式如下:

-XX:+PrintGC输出简要GC日志-XX:+PrintGCDetails输出详细GC日志#gc.log输出到统一的日志目录-Xloggc:/data/logs/gc.log输出GC日志到文件-XX:+PrintGCTimeStamps输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)-XX:+PrintGCDateStamps输出GC的时间戳(以日期的形式,如2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC在进行GC的前后打印出堆的信息-XX:+PrintReferenceGC打印年轻代各个引用的数量以及时长2.dump文件

dump文件是Java进程出现OOM时自动生成的文件,通过此文件可以定位进程发生OOM的位置。可配置参数自动生成dump文件。

-XX:+HeapDumpOnOutOfMemoryError#dump文件输出到统一的日志目录-XX:HeapDumpPath=/data/logs/HeapDumpOnOutOfMemoryError.dump3.堆内存

堆内存设置是我们最容易设置混乱的参数,但对于我们标准化交付的服务器,虽不至于所有的应用使用完全一致的堆内存参数,但是大多数情况下是可以统一的。

-Xms2048m-Xmx2048m-XX:MaxPermSize:256m

至此,常见的JVM参数设置完毕,由于这些参数多和开发定位问题有关,因此我们在此只是将其作为进程管理规范的内容进行讲解,而不是研究其具体作用。但你以为我们的工作就到此为止了吗?

我们还可以通过设置JVM环境变量来实现部分扩展功能,因此也需要将环境变量作为进程管理规范的一部分。

4.JVM环境变量

环境变量便于运维能够灵活控制java进程运行的参数,这样可以和自动化相结合,实现应用的统一部署,有效避免更改配置文件的动作。

关于环境变量的定义,需要结合各自的生产环境特性来自行定义,我这面的定义的变量如下:

#应用名-Dapp.name=test#环境区分-Denv=prod或uat或stg#临时文件目录-Djava.io.tmpdir=/data/tmpdir

其中比较重要的是-Denv=xxx,通过在各个环境预设此变量,可实现不同环境配置文件的绑定。例如:在springcloud项目中可以和各环境的配置中心调用进行关联。

其他环境变量大家可以和研发协商按需灵活添加。

按规范管理1.统一管理

通过以上各参数的简单讲解,我们有了一套比较固定且完整的JVM参数,稳定性和灵活性兼顾,也便于我们后续的管理。

-server-Xms2048m-Xmx2048m-XX:MaxPermSize:256m-Dapp.name=test-Denv=prod-Djava.io.tmpdir=/data/tmpdir-Xloggc:/data/logs/gc.log-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-XX:+PrintHeapAtGC-XX:+PrintReferenceGC-Dsun.jnu.encoding=UTF-82.supervisor守护管理

随着JVM启动参数的尘埃落定,如何启动Java进程就是我们接下来要面对的问题。我们经常使用的后台启动方式有以下几种:

nohup

screen

supervisor

其中nohup、screen都需要配合脚本,才能更友好的管理,因此我还是选择supervisor作为java应用的守护进程。

#1.安装yuminstallsupervisorsystemctlenablesupervisordsystemctlstartsupervisord#2.配置vim/etc/supervisord.d/test.ini[program:test];启动用户user=work;程序启动命令command=java-server-Xms2048m-Xmx2048m-XX:MaxPermSize:256m-Dapp.name=test-Denv=prod-Djava.io.tmpdir=/data/tmpdir-Xloggc:/data/logs/gc.log-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-XX:+PrintHeapAtGC-XX:+PrintReferenceGC-Dsun.jnu.encoding=UTF-8-jartest.jarnumprocs=1;程序启动目录directory=/App/java_app/test;在supervisord启动时自启动autostart=true;程序异常退出后自动重启,可选值:[unexpected,true,false],默认为unexpectedautorestart=true;启动10秒后没有异常退出,就表示进程正常启动了startsecs=10;启动失败自动重试次数startretries=3#3.更新配置文件,更新配置文件并重启supervisorctlupdate#4.重载配置文件,注意reload会导致supervisor重启,所管理的进程会重启supervisorctlreload#5.查看状态supervisorctlstatus#6.启动supervisorctlstarttest

在此需要注意的是supervisor并不能托管任何进程,而只适合管理运行于前台的进程(如java直接启动),对于运行后台daemon的进程(如tomcat),supervisorctlstatus会报错"BACKOFFExitedtooquickly(processlogmayhavedetails"。

总结

总结出一份用于运维过程中各个环境的JVM参数其实很简单,关键在于我们是否意识到了一份进程管理规范的重要性,怎样和当前的自动化水平来结合,实现其最终的价值。而对于只负责躺平的规范来说,我们做的这些工作意义不大。

作者:木讷大叔爱运维

运维思考:Java进程管理规范

最后,各种个性化的JVM参数,无益于运维对数量为百、千级别进程的有效管理。此时统一的Java进程管理规范就可以发挥作用,通过标准化部署,Java使用统一的JVM参数运行,一旦某个应用出现异常,我们可以快速收集各种异常日志提供给研发进一步定位问题。最终目标是,运维能提供给研发的有效信息,肯定是排除了因环境...

企业的IT运维,如何进行智能化建设?

智能运维建设现在已经在各行各业的新一代运维建设中提上了日程安排,擎创科技作为国内首家专注于智能运维的解决方案提供方,针对百余家不同行业的企业运维管理者做了相关调研(其中部分数据来源于双态IT联盟的调研成果),就智能运维的展开路径...

什么情况下OOM会终止java进程

防止重要的系统进程触发(OOM)机制而被杀死:可以设置参数/proc/PID/oom_adj为-17,可临时关闭linux内核的OOM机制。内核会通过特定的算法给每个进程计算一个分数来决定杀哪个进程,每个进程的oom分数可以/proc/PID/oom_score中找到。我们运维过程中保护的一般是sshd和一些管理agent。保护某个进程不被内核杀...

运维新手们,别再问需不需要学PYTHON了

PYTHON 第一是个非常牛 B 的脚本语言, 能满足绝大部分自动化运维的需求,又能做后端 C/S 架构,又能用 WEB 框架快速开发出高大上的 WEB 界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来,你才有资格跟老板谈重视, 否则,还是老老实实回去装机器吧。运维开发为什么要...

为什么运维用python

让系统易运维管理是一个工程,Python在服务器管理工具上非常丰富:配置管理(Saltstack)、批量执行( Fabric, saltstack)、监控(Zenoss, nagios 插件)、虚拟化管理( Python-libvirt)、进程管理 (Supervisor)、云计算(Openstack)等,大部分系统C库都有Python绑定。作为一门编程语言,Python几乎可以用在任何领域...

运维监控 zabbix可以做哪些监控

1、监控windows进程内存。在C盘中创建脚本a.bat,内容tasklist。2、在zabbix客户端配置文件zabbix-agentd.win.conf中添加UserParameter=aa,c:\a.bat。3、在主机的监控项中添加新的监控项,这样就可以监控windows进程内存。4、还可以通过zabbix监控网络设备,网络配置>接口/区域>区域TAB页,在“允许管理...

想学linux运维从哪学起,学习路线是什么?

Linux作为云计算必备技能,其学习内容覆盖广泛,从基础到高级,包括Linux操作、网络知识、服务器运维、架构设计与自动化运维,直至云上基础运维。以下是详细的步骤:阶段 1:Linux入门 在此阶段,您将学习Linux的基本操作,包括文件系统管理、权限设置、进程管理等核心知识。掌握这些基础操作是后续深入学习的...

Linux运维如何从初级进阶为高级

1、Linux基础 刚开始阶段需要熟悉Linux/Windows操作系统安装,目录结构、启动流程等。2、系统管理 主要学习Linux系统,生产环境中基本都在字符界面完成工作,所以要掌握常用的几十个基本管理命令,包括用户管理、磁盘分区、软件包管理、文件权限、文本处理、进程管理、性能分析工具等。3、网络基础 OSI和TCP/IP...

Linux运维工程师一般要求掌握哪些知识

1、开发能力,这点非常重要,因为运维工具都需要自已开发,开发语言:perl、python、php(其中之一)、shell(awk,sed,expect….等),需要有过实际项目开发经验,否则工作会非常痛苦。2、通用应用方面需要了解:操作系统(目前国内主要是linux、bsd)、webserver相关 (nginx,apahe,php,lighttpd,java。。。)...

开发自动化运维架构六要素

进程管理包括应用安装路径、目录结构、规范进程名、规范端口号、启停方式、监控方案等等,被收纳在进程管理的范畴。做好进程管理的全局规划,能够极大的提升自动化运维程度,减少计划外任务的发生。空间管理做好磁盘空间使用的管理,是为了保证业务数据的有序存放,也是降低计划外任务发生的有效手段。要求提前做好的规划:备份...

什么是运维管理?

运维管理就是一个规范的流程,也可以理解成一个管理系统。管理信息系统应该是利用各类通用构件、组件、和工具等搭建构造形成的,它们是具有独立性的、松耦合、可拆卸、易维护的产品集合,从而使得支持整个组织运行的一体化管理信息系统能够持续地支持应用的拓展和完善,能够实现自身能力和效率的可持续发展和...

运维管理规范 运维标准化管理流程 进程管理程序 运维规范 运维服务规范 运维服务标准规范 运维管理解决方案 运维部署文档规范 运维管理体系
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
g7346次列车途经站点,鹤壁北站旅游路线 这就是江湖昆仑天池在哪里-这就是江湖昆仑天池位置 这就是江湖天池钓鱼怎么弄-天池钓鱼玩法技巧分享 最好的姐妹不再信任自已了,还需要挽留吗? 孩子现在读四年级下册,英语零基础26个字母都不认识,一个半月能补上吗... 车子半年不开有没有问题呀 车半年不开没事吧 两江新区两化融合贯标需要什么条件? 竹字头加生念什么 长汀县经济发展 美国的联想y700为什么不能下中国的游戏呢?主要是下载了qq飞车不能安装... java运维和开发的区别? 属于我的世界作文600字 眼有眼屎是什么原因 眼睛为什么总是有眼屎?! 眼眵的介绍 有位伊人在水一方是什么意思 酒鬼酒怎么样?酒鬼酒是什么酒?酒鬼酒的价格是多少(酒鬼酒官方价格) 微信公众号运营者可以扫码登录吗 公司的组织架构是什么 苹果MR头戴设备将支持哪些高级功能? 孕早期小腹坠胀正常吗 苹果内部针对MR头显产生分歧 内部为何不看好? 组织架构体系是什么 怀孕多久会有小腹坠胀 怀孕初期小腹坠痛正常吗 怀孕多久有小腹坠胀感 苹果先生MrApple是哪个国家的产品 孕早期小腹坠胀怎么回事 让Siri打造“元宇宙”?苹果MR头显内容生态大起底 怀孕初期小腹坠胀是什么原因 怀孕初期下腹有胀坠感怎么办 太原理工大学一本B类专业有哪些 太原理工一本B类的车辆工程如何?在哪个校区? 太原理工大学和山西大学的专业对比 WPS文档一页变两页怎么设置 饿了么骑手怎么加入? 奥深简介 奥深不良反应 复方氟米松软膏用药须知 奥深的禁忌 怎样才能让微信里的聊天面板上有礼物落下来?像手或表情什么的。 微信怎么打字有动态? 梦岚是什么意思? 经济学的mc是什么意思? 将电负性理解为描述不同元素的气态原子得电子的能力大小,行吗_百度知 ... 什么是电负性?电负性的大小体现了什么性质? 八八大发是成语吗 UV电防胶(三防漆)CA6001 中国哪些电视剧在韩国播出 空盒压力表dym3 披发缨冠