linux环境下启动应用的不同方式对比分析

大家好,我是G探险者。

平时我们在Linux环境下启动Java应用程序时。可能会选择在前台或后台运行它们。但是这两者启动命令的各种参数含义是什么意思呢,今天我们就来聊聊,并分析一下他们的特点。

1. 前台启动

参数:

  • java: Java程序的启动命令。
  • -Xms2G 和 -Xmx2G: 分别设置Java虚拟机(JVM)的初始和最大堆大小为2GB,根据实际需要来设置
  • -XX:+HeapDumpOnOutOfMemoryError: 在内存溢出时生成堆转储文件。
  • -XX:HeapDumpPath: 指定堆转储文件的保存路径。
  • -jar: 表明接下来的参数是一个Jar包。
  • -Dproperty.name=value: 设置系统属性,这里用property.namevalue表示一般性的属性名和值。
  • -Dlog.path: 设置日志文件的存放路径。
  • -Dconfig.path: 指定配置文件的路径。
  • /path/to/app.jar: 应用程序的Jar包位置和名称。
  • --spring.config.location: 指定Spring框架配置文件的位置。
  • --logging.config: 指定日志配置文件的位置。

-D命令详解:
在Java命令行中,-D标志用于设置系统属性,这些属性通常用于配置JVM,Java应用程序或者框架特定的行为。以下是一些常见的系统属性示例:

  • -Djava.library.path=/path/to/libs
    设置查找本地库(如.so.dll)的路径。

  • -Djava.security.policy=somepolicy.policy
    为Java应用程序指定一个安全策略文件。

  • -Duser.timezone=GMT+8
    设置用户的时区。

  • -Dfile.encoding=UTF-8
    设置文件编码格式,这对读写文件时的编码解码非常重要。

  • -Dsun.net.client.defaultConnectTimeout=10000
    设置默认的网络连接超时时间(单位为毫秒)。

  • -Dsun.net.client.defaultReadTimeout=10000
    设置默认的网络读取超时时间(单位为毫秒)。

  • -Duser.country=US -Duser.language=en
    设置用户的国家和语言,这可能会影响到应用程序中的本地化内容。

  • -Dlog4j.configuration=file:/path/to/log4j.properties
    指定log4j日志框架的配置文件路径。

  • -Dspring.profiles.active=production
    设置Spring框架的活动配置文件,此处为production

  • -Djavax.net.ssl.keyStore=/path/to/keystore.jks
    指定Java密钥库的路径,这在使用SSL连接时很有用。

  • -Djavax.net.ssl.keyStorePassword=changeit
    设置访问Java密钥库时的密码。

这些系统属性可以在启动Java应用程序时传递给JVM,从而改变其默认行为或配置特定的参数。根据应用程序的需要,开发人员和系统管理员可以设置和调整各种系统属性。

示例:

java -Xms2G -Xmx2G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heap-dump.hprof -jar -Dproperty.name=value -Dlog.path=/path/to/log -Dconfig.path=/path/to/config.properties /path/to/app.jar --spring.config.location=/path/to/application.yml --logging.config=/path/to/logging-config.xml

2. 后台启动

参数:

  • nohup: 用于在关闭终端后继续运行命令。
  • > /dev/null: 将标准输出重定向到/dev/null,即丢弃输出。
  • 2>&1: 将标准错误重定向到标准输出(在这里也是/dev/null)。
  • &: 将命令放入后台执行。

示例:

nohup java -Xms2G -Xmx2G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heap-dump.hprof -jar -Dproperty.name=value -Dlog.path=/path/to/log -Dconfig.path=/path/to/config.properties /path/to/app.jar --spring.config.location=/path/to/application.yml --logging.config=/path/to/logging-config.xml > /dev/null 2>&1 &

3. 实时日志查看

通过前台启动的应用,我们可以很容易的查看到实时运行日志,那如果是通过后台命令启动的应用,该如何查看实时运行日志呢?

当你在后台启动一个应用程序时,通常会将输出重定向到一个文件。如果你的命令是这样的:

nohup java -jar yourapp.jar > app.log 2>&1 &

在这个例子中,app.log 文件会包含应用程序的标准输出和错误输出。为了实时查看日志,你可以使用 tail 命令,它非常适合于监控实时更新的日志文件。

可以这样使用 tail

tail 是一个在Unix-like操作系统中常用的命令行工具,用于输出文件中的最后部分。默认情况下,它会打印出文件的最后10行,但是你可以通过命令行参数来修改这个行为。
以下是tail命令的一些常见用法和选项:

  • tail [文件名]
    显示指定文件的最后10行内容。
  • tail -n [行数] [文件名]
    显示指定文件的最后N行内容。例如,tail -n 20 file.txt 会显示file.txt的最后20行。
  • tail -f [文件名]
    实时监控指定文件的新增内容。这对于查看实时日志文件特别有用。当文件有新内容写入时,tail 会持续地将新内容输出到终端。
  • tail -F [文件名]
    和 -f 类似,但是当文件被删除后再重新创建时,tail 会重新打开文件继续监控。
  • tail --pid=[进程号] -f [文件名]
    与 -f 一起使用,监控日志直到特定的进程终止。
  • tail -c [字节数] [文件名]
    输出文件的最后N个字节。例如,tail -c 100 file.txt 会显示file.txt的最后100个字节。

tail 命令特别适合于那些长时间运行的应用程序,这些程序会持续地向日志文件中写入内容。使用 tail,系统管理员和开发者可以实时查看最新的日志条目,以便监控应用程序的状态或进行故障排除。

tail -f app.log

这里的 -f 参数会让 tail 命令持续输出新追加到文件的内容,这样你就可以看到实时的日志输出了。

如果你的应用程序使用了像 log4j 或 logback 这样的日志框架,并且配置了特定的日志文件,那么你也可以直接使用 tail 来监控那些日志文件。

此外,如果你的系统使用了日志管理工具如 systemd,那么你可能需要使用 journalctl 命令来查看日志。例如,如果你的应用程序作为一个服务启动,你可以这样查看日志:

journalctl -u yourservice.service -f

这里的 -u 参数指定服务的名称,-f 同样表示实时跟踪最新的日志条目。

记得替换 app.log 或 yourservice.service 为你的实际日志文件名或服务名。

4.对比分析

这里是一个简化的对比表格,概括了前台和后台启动命令的主要差异和参数含义:

特性/参数前台启动命令后台启动命令
命令javanohup java
初始堆大小-Xms2G (设置JVM的初始堆大小为2GB)-Xms2G (同前台)
最大堆大小-Xmx2G (设置JVM的最大堆大小为2GB)-Xmx2G (同前台)
堆转储-XX:+HeapDumpOnOutOfMemoryError (在内存溢出时生成堆转储文件)-XX:+HeapDumpOnOutOfMemoryError (同前台)
堆转储路径-XX:HeapDumpPath=/path/to/heap-dump.hprof-XX:HeapDumpPath=/path/to/heap-dump.hprof (同前台)
系统属性-Dproperty.name=value (通用的系统属性设置)-Dproperty.name=value (同前台)
日志路径-Dlog.path=/path/to/log-Dlog.path=/path/to/log (同前台)
配置文件路径-Dconfig.path=/path/to/config.properties-Dconfig.path=/path/to/config.properties (同前台)
应用程序Jar包/path/to/app.jar/path/to/app.jar (同前台)
Spring配置文件--spring.config.location=/path/to/application.yml--spring.config.location=/path/to/application.yml (同前台)
日志配置文件--logging.config=/path/to/logging-config.xml--logging.config=/path/to/logging-config.xml (同前台)
输出重定向输出显示在终端> /dev/null (将标准输出重定向到/dev/null, 即丢弃输出)
错误重定向错误显示在终端2>&1 (将标准错误重定向到标准输出,这里也就是/dev/null)
后台执行无 (进程在终端保持活跃)& (将命令放入后台执行)
会话依赖依赖当前终端会话,终端关闭则程序终止独立于终端会话,终端关闭后程序继续运行
适用场合开发和测试环境,需要实时监控输出生产环境,服务需要长时间运行,不需要实时监控输出

结论

选择前台或后台启动方式取决于应用程序的需求。前台模式适合于开发和测试环境,以便实时监控应用程序的输出和性能。而后台模式则适合于生产环境,可以确保应用程序在用户退出会话后继续运行,无需监视其输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 MySQL数据库 』数据库之表的约束

文章目录 前言 💻空属性约束(非空约束) 🔖default约束(默认值约束,缺省) 🔖列描述comment 🔖数字类型长度zerofill 🔖主键primary key 🔖📍 追加主键 📍📍 删除主键 &…

快速集成Skywalking 9(Windows系统、JavaAgent、Logback)

目录 一、Skywalking简介二、下载Skywalking服务端三、安装Skywalking服务端3.1 解压安装包3.2 启动Skywalking 四、关于Skywalking服务端更多配置五、Java应用集成skywalking-agent.jar5.1 下载SkyWalking Java Agent5.2 集成JavaAgent5.3 Logback集成Skywalking5.4 集成效果 …

sort()方法详解

作用 对数组进行排序,默认情况下,将元素转换为字符串,然后按照它们的UTF-16码值升序排序。 语法 sort() 元素是字符串时 默认排序时根据字典顺序进行排序的 元素是字母字符串时,按照字母进行升序, const stringAr…

C语言从入门到精通之【其他运算符】

sizeof运算符和size_t sizeof运算符以字节为单位返回运算对象的大小。 例如 :sizeof(int) 打印转换说明,使用C99新增的**%zd转换说明 – 如果编译器不支持%zd,请将其改 成%u或%lu**。 C 语言规定,sizeof 返回 size_t 类型的值…

mongodb使用简单文档

1、mongodb安装与卸载 1.1、安装 python -m pip install pymongo 或 pip install pymongo如果要安装指定版本: python -m pip install pymongo3.5.1对已有的版本进行升级: python -m pip install --upgrade pymongo1.2、卸载 pip uninstall pymongo…

【C#】字符串拼接相关

目录 1.字符串拼接方式1 用号进行字符串拼接 复合运算符 2.字符串拼接方式2 3.控制台打印拼 4.例子 1.字符串拼接方式1 之前的算数运算符 只是用来数值类型变量进行数学运算的而 string 不存在算数运算符 不能计算 但是可以通过号来进行字符串拼接 用号进行字符串拼接 …

Vulhub靶场-KIOPTRIX: LEVEL 1

目录 环境配置 端口扫描 漏洞发现 mod_ssl漏洞利用 Samba远程代码执行漏洞利用 环境配置 首先去官网下载靶场导入到虚拟机中 下载地址:Kioptrix: Level 1 (#1) ~ VulnHub 下载完成之后导入到vmware中 这里需要改nat,桥接模式的靶机拿不到IP&…

LitCTF2023 - Reverse方向 全WP

文章目录 [LitCTF 2023]世界上最棒的程序员[LitCTF 2023]ez_XOR[LitCTF 2023]enbase64[LitCTF 2023]snake[LitCTF 2023]程序和人有一个能跑就行了[LitCTF 2023]debase64[LitCTF 2023]For AiurLitCTF{Pylon_OverCharge!!_We_Must_construc7_addition4l_pylons} [LitCTF 2023]世界…

torch.nn.functional.log_softmax 函数解析

该函数将输出向量转化为概率分布,作用和softmax一致。 相比softmax,对较小的概率分布处理能力更好。 一、定义 softmax 计算公式: log_softmax 计算公式: 可见仅仅是将 softmax 最外层套上 log 函数。 二、使用场景 log_soft…

跟李沐学AI-深度学习课程00-03【预告、课程安排、深度学习介绍、安装】

目录 00 预告 01 课程安排 02 深度学习介绍 03 安装 本地安装 04 数据操作数据预处理 数据操作 数据类型 创建数组 访问元素 数据操作实现 入门 运算符 广播机制 索引和切片 节省内存 转换为其他Python对象 数据预处理实现 读取数据集 处理缺失值 转换为张…

POSIX信号量

POSIX信号量 POSIX信号量用于同步操作,达到无冲突访问临界资源的目的,可以用于线程之间的通信。而信号量的本质其实就是一把计数器!!而我们对计数器有2个操作,一个是增加计数器的值,一个是减少计数器的值。…

Flink(七)【输出算子(Sink)】

前言 今天是我写博客的第 200 篇,恍惚间两年过去了,现在已经是大三的学长了。仍然记得两年前第一次写博客的时候,当时学的应该是 Java 语言,菜的一批,写了就删,怕被人看到丢脸。当时就想着自己一年之后&…