返回顶部
首页 > 资讯 > 精选 >java启动参数如何排查
  • 501
分享到

java启动参数如何排查

2023-07-02 00:07:27 501人浏览 安东尼
摘要

这篇文章主要讲解了“java启动参数如何排查”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java启动参数如何排查”吧!排查过程我们的应用是java应用,jdk版本是Open-jdk8,阿里

这篇文章主要讲解了“java启动参数如何排查”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java启动参数如何排查”吧!

排查过程

我们的应用是java应用,jdk版本是Open-jdk8,阿里云agent是直接注入到容器中的,因此会将agent启动参数自动注入到 JAVA_TOOL_OPTioNS 环境变量中,当应用启动时会自动带上agent启动参数。

agent没注册,首先检查应用的启动日志,发现应用是启动成功的,Tomcat端口都是正常的。仔细观察日志,发现了问题。由于agent 启动参数是注入到 JAVA_TOOL_OPTIONS 中的,通常JVM 在启动的时候会优先加载 JAVA_TOOL_OPTIONS,日志中会出现 Picked up JAVA_TOOL_OPTIONS 的字样,如下图所示,但是问题现场却没有这一行和agent相关的启动日志,说明 jvm 启动的时候并没有加载 JAVA_TOOL_OPTIONS。

java启动参数如何排查

我们开始怀疑是 agent启动参数 的问题,以为是agent在容器重建时没有将启动参数注入到环境变量中。但是通过环境变量一看,发现 JAVA_TOOL_OPTIONS 是在的,而且每个agent的参数都是齐全的。

java启动参数如何排查

这个时候就开始怀疑是不是启动脚本的问题,是不是有人在启动脚本中加了unset JAVA_TOOL_OPTIONS,因为当存在JAVA_TOOL_OPTIONS时,使用jdk相关的命令都会带上JAVA_TOOL_OPTIONS中的参数,造成一定的困扰,所以有时候在排查问题的时候会先unset掉这个变量,但是检查完脚本也没有问题。

最后开始咨询阿里云的工程师,怀疑是不是agent或者容器环境有问题。经过反复比较正常容器和问题容器的JAVA_TOOL_OPTIONS启动参数,发现问题容器因为多加载一个agent,JAVA_TOOL_OPTIONS多出来一段参数,去掉这段参数就能恢复正常,加上就会有问题。到这里,可能正常的思路都是怀疑是多出来的参数造成的。但在排查其他正常容器时发现,有的容器即使有这一段参数也能正常启动。

这个时候,阿里云的工程师怀疑是不是参数太长导致的,因为有问题的容器的应用名字比较长,于是我们开始测试,发现确实是这个问题,如下图所示。随后确定了问题所在,jdk8 在加载默认环境变量时会检查长度,当大于1024字节时就会加载失败

java启动参数如何排查

环境变量

在jdk相关的环境变量中,有两种默认的环境变量 JAVA_TOOL_OPTIONS_JAVA_OPTIONS

JAVA_TOOL_OPTIONS:在jdk8及之前版本中,该变量是最标准的,所有虚拟机都能识别和应用的环境变量,在jdk9之后被JDK_JAVA_OPTIONS所取代。该变量限制1024字节,在不同虚拟机中表现不一样,有的是加载失败,有的是截取一段。

_JAVA_OPTIONS:也是默认的环境变量,但是它是JVM厂家自定义的,可以覆盖JAVA_TOOL_OPTIONS,但各厂家的命名不同,_JAVA_OPTIONS是oracle的JVM,而IBM的则是用IBM_JAVA_OPTIONS。

因此为避免出现问题,我们应该尽量避免使用默认的环境变量,通常情况下可以在脚本中自定义启动变量如 JAVA_OPTSSpringBoot_OPTS等等。然后在启动java时显式的指定启动参数。

java [-options] -jar xxx.jar [args…]可以写成JAVA_OPTS="[-options]"JAVA_ARGS="[args…]"java ${JAVA_OPTS} -jar xxx.jar ${JAVA_ARGS}

附:启停脚本

项目打包后在测试环境的启停都是个体力活,刚好又给笔者遇到了,综合别人的脚本记录了一下

判断 Java 进程是否存在

APP_NAME=xxx.jarpid=jps -l | grep $APP_NAMEif [ -z $pid ]; then echo "$APP_NAME started" else echo "$APP_NAME stoped" fi # 普通进程的# pid=ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'

启停脚本

APP_NAME=xxxx-1.0-SNAPSHOT.jarpid=0checkpid() {    javaps=`jps -l | grep $APP_NAME`    if [ -n "$javaps" ]; then    pid=`echo $javaps | awk '{print $1}'`    else    pid=0}start() {    checkpid    if [ $psid -ne 0 ]; then    echo "$APP_NAME already started"    else    echo "Starting $APP_NAME ..."    `nohup java -jar $APP_NAME > $APP_NAME'.out' 2>&1 &`    checkpid    if [ $pid -ne 0]; then    echo "$APP_NAME start success"    else    echo "$APP_NAME start faild"    fi    fi}stop() {    checkpid    if [ $pid -ne 0 ]; then    echo "Stoping $APP_NAME..."        kill -9 $pid        if [$? -eq 0 ]; then        echo "$APP_NAME stop success"        else        echo "$APP_NAME stop faild"       fi    else    echo "$APP_NAME already stoped"   fi}case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; *)# 其他任何情况 echo "help: $0 {start|stop|restart}"echo "例子: ./deploy startexit 1esacexit 0

感谢各位的阅读,以上就是“java启动参数如何排查”的内容了,经过本文的学习后,相信大家对java启动参数如何排查这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: java启动参数如何排查

本文链接: https://lsjlt.com/news/338672.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java启动参数如何排查
    这篇文章主要讲解了“java启动参数如何排查”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java启动参数如何排查”吧!排查过程我们的应用是java应用,jdk版本是Open-jdk8,阿里...
    99+
    2023-07-02
  • linux如何查看java启动参数
    要查看Java启动参数,您可以使用以下命令行选项之一:1. 使用`java -version`命令查看Java版本和默认启动参数。该...
    99+
    2023-08-30
    linux java
  • java启动参数之谜的排查过程
    目录背景排查过程环境变量附:启停脚本判断 Java 进程是否存在启停脚本总结背景 最近遇到一个有意思的事情,java应用运行在阿里云的ack集群中,某一天有个应用启动突然发现阿里云上...
    99+
    2024-04-02
  • 如何查看java程序启动参数
    在Java中,可以通过System.getProperty()方法获取程序的启动参数。具体步骤如下:1. 在程序中使用System....
    99+
    2023-10-19
    java
  • jvm启动参数如何配置
    JVM启动参数可以通过命令行方式或者在启动脚本中进行配置。以下是一些常见的JVM启动参数配置示例:1. 设置堆内存大小:-Xms:设...
    99+
    2023-10-11
    jvm
  • tomcat启动时卡住问题如何排查
    本篇内容主要讲解“tomcat启动时卡住问题如何排查”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“tomcat启动时卡住问题如何排查”吧!正常项目无法访问(Linux 服务器),启动tomcat...
    99+
    2023-07-05
  • 如何安装Redis、Redis启动参数
    这篇文章主要介绍如何安装Redis、Redis启动参数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  Redis是一个key-value存储系统。和Memcached类似,但是解决...
    99+
    2024-04-02
  • Kubernetes中Nginx服务启动失败如何排查
    这篇文章主要介绍“Kubernetes中Nginx服务启动失败如何排查”,在日常操作中,相信很多人在Kubernetes中Nginx服务启动失败如何排查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kuber...
    99+
    2023-07-05
  • springboot 启动如何修改application.properties的参数
    目录修改application.properties的参数1、方法一:直接在cmd中执行2、方法二:配置3、方法三4、方法四springboot项目启动参数以下几种方式都可以被@Va...
    99+
    2024-04-02
  • Eclipse IDE中如何设置JVM启动参数
    目录如何设置JVM启动参数下面是一些设置的步骤在Eclipse上手动设置jvm参数典型设置如何设置JVM启动参数 关于《深入理解Java虚拟机》里面测试OutOfMemoryErro...
    99+
    2024-04-02
  • 服务器自动重启的原因及如何排查
    服务器自动重启的原因可能包括以下几种: 硬件问题:可能是服务器硬件出现故障,导致服务器自动重启。 软件问题:可能是服务器上的某些软...
    99+
    2024-04-20
    服务器
  • linux如何查看java服务启动情况
    要查看Java服务的启动情况,可以使用以下命令:1. 使用`ps`命令查看正在运行的Java进程:```ps -ef | grep ...
    99+
    2023-09-26
    linux java
  • 小程序如何设置启动页面参数
    这篇文章将为大家详细讲解有关小程序如何设置启动页面参数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  小程序的启动  微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地。  紧接着通过 app...
    99+
    2023-06-26
  • postgres数据库启动参数
    SIGTERM   不再允许新的连接,但是允许所有活跃的会话正常完成他们的工作,只有在所有会话都结束任务后才关闭。这是智能关闭。    ...
    99+
    2024-04-02
  • win10干净启动排查的方法
    这篇文章主要介绍“win10干净启动排查的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10干净启动排查的方法”文章能帮助大家解决问题。win10干净启动排查步骤XP系统:步骤 1:启动系...
    99+
    2023-07-01
  • Java如何排查oom异常
    在Java中,OOM(Out of Memory)异常通常是由于程序尝试分配的内存超出了虚拟机的限制而导致的。以下是一些排查OOM异...
    99+
    2023-10-10
    Java
  • 如何使用 gocql 动态添加查询参数?
    对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何使用 gocql 动态添加查询参数?》,主要介绍了,希望对大家的知识积...
    99+
    2024-04-05
  • PHP启动异常的排查与修复
    PHP是一种常用的服务器端脚本语言,广泛应用于Web开发领域。在开发和部署过程中,有时会遇到PHP启动异常的情况,造成网站无法正常访问。本文将介绍PHP启动异常的可能原因,并提供具体的...
    99+
    2024-03-12
    异常排查修复 php启动 php解析 php脚本
  • Oracle参数如何查看
    这篇文章主要介绍Oracle参数如何查看,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! Oracle 中有很多参数,同时也有不同设置参数的方式,比如:会...
    99+
    2024-04-02
  • linux中如何排查Java问题
    小编给大家分享一下linux中如何排查Java问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linux命令类tail最常用的tail -fgrepawk1 基...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作