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)
后台执行无 (进程在终端保持活跃)& (将命令放入后台执行)
会话依赖依赖当前终端会话,终端关闭则程序终止独立于终端会话,终端关闭后程序继续运行
适用场合开发和测试环境,需要实时监控输出生产环境,服务需要长时间运行,不需要实时监控输出

结论

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我认为除了HelloWorld之外,Python的三大数据转换实例可以作为开始学习Python的入门语言。

Python的三大数据转换实例 一、反转三位数 class Solution:def funtcion(self,number):hint(number/100)tint(number%100/10)zint(number%10)return 100*z10*th if __name____main__:solution Solution()num123new_num solution.funtcion(num)print("输入:{}".fo…

在做题中学习(30):字符串相加

思路: 相加时要转换成对应的数字,所以让字符数字-0 如‘9’-‘0’(ASCII)57-489 9110,会进1,把进位保存起来,只取0头插到新串里。 头插时要转换对应字符数字,所以让对应的数字‘…

各类软件docker安装

docker Docker 要求 CentOS 系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本: uname -r 3.10.0-1062.1.2.el7.x86_64 安装 Docker: 安装 Docker:yum -y install dockerkafka和zookeeper docker pull wurstmei…

Unity 6 是下一个 LTS 版本即将发布

Unity 公司宣布,即将发布 Unity 6,并表示其为下一个长期支持版本 (LTS)。 Unity 在大会上演示了全新的 Unity 6引擎,并通过 Syncy Studios 采用 Unity 6 制作的《幻想王国(Fantasy Kingdom)》Demo 进行了演示&#xff…

OpenGL_Learn13(材质)

1. 材质 cube.vs #version 330 core layout (location 0) in vec3 aPos; layout (location 0 ) in vec3 aNormal;out vec3 FragPos; out vec3 Normal;uniform mat4 model; uniform mat4 view; uniform mat4 projection;void main() {FragPosvec3(model*vec4(aPos,1.0));Norma…

【MATLAB】史上最全的5种数据插值算法全家桶

有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有5种数据插值算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

Gem5模拟器学习之旅

安装gem5 模拟器 翻译自官网(https://www.gem5.org/documentation/learning_gem5/part1/building/) 支持的操作系统和环境 gem5的设计考虑到了Linux环境。我们定期在 Ubuntu 18.04、Ubuntu 20.04 和 Ubuntu 22.04 上进行测试,以确保 gem5 在…

zyj-ha 安装过程及使用部署

一.安装过程排坑 1. 硬件环境准备 排坑 1 首先,服务器至少需要 2 台,每台服务器至少需要 2 块网卡,并且必须有预留 心跳线网口,不能被其他业务占用,否则容易出现脑裂。 2. 通过配置管理工具导入安装包 …

CAD长方形纤维插件2D

插件介绍 CAD长方形纤维插件2D版本可用于在AutoCAD软件内生成随机分布的长方形纤维图形,生成的dwg格式模型可用于模拟二维随机分布的纤维复合材料、随机初始裂缝等,同时模型可导入COMSOL、Abaqus、ANSYS、Fluent等有限元软件内进行仿真分析计算。 插件…

基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能

准备素材: 1. openssl的版本: openssl-1.1.1w.tar.gz 2.curl的版本:curl-8.4.0.tar.gz 目标: 1.编译出openssl库; 2.编译出curl可执行文件及库; 步骤一:先解压压缩包 tar -zxvf openssl-1…

风光能互补发电庭院路灯系统技术原理

风光互补发电系统是由风力发电机组配合太阳能电池组件组成,通过专用的控制逆变器,将风力发电机输出的低压交流电整流成直流电,并与光伏电池组件输出的直流电汇集在一起,充入蓄电池组,实现稳压、蓄能和逆变全过程&#…

不动产数据质量提升_电子档案挂接

前言 做了不动产数据质量提升项目,其中包括集体土地所有权档案扫描、挂接。扫描的工作已经完成了,现在需要进行电子档案挂接。正常来说通过不动产系统技术支撑单位的批量挂接功能,但现实是一言难尽。   尝试过进行抓包分析,提交…

MySQL数据库下的Explain命令深度解析

Explain是一个非常有的命令,可以用来获取关于查询执行计划的信息,以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性,并不总是会说出真相,但是它的输出是可以获取的最好信息&…

C#单例模式懒汉式与饿汉式

单例模式一般分为懒汉模式和饿汉模式,懒汉式单例在第一次引用时创建实例,不是在类加载时;饿汉式单例模式是一种在类加载时就创建实例的方式,因此也称为静态初始化。 单例模式实现的技巧时构造私有,向外提供静态实例。…

【数据分享】2023年我国省市县三级的独角兽企业数量(Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

【算法萌新闯力扣】:找到所有数组中消失对数字

力扣热题:找到所有数组中消失对数字 开篇 这两天刚交了蓝桥杯的报名费,刷题的积极性高涨。算上打卡题,今天刷了10道算法题了,题目都比较简单,挑选了一道还不错的题目与大家分享。 题目链接:448.找到所有数组中消失对…

UML统一建模语言

UML包含3种构造块:事物、关系、图。 事物:模型中代表性成分的抽象关系:把事物结合在一起图:聚集了相关的事物 事物 结构事务:模型的静态部分,包括类、接口、协作、用例、主动类、构件、制品、结点 行为事…

【LeetCode刷题-双指针】--16.最接近的三数之和

16.最接近的三数之和 方法&#xff1a;排序双指针 class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int ans nums[0] nums[1] nums[2];for(int i 0;i<nums.length;i){int start i1,end nums.length - 1;while(start < en…

11 月 11 日 ROS 学习笔记——ROS 架构及概念

文章目录 前言一、 ROS 文件系统级1). 工作空间 Ws2). 功能包3). 消息 msg4). 服务 srv 二、计算图级1). 动态加载节点 nodelet2). 主题 topic3). 服务 srv4). 消息 msg5). 试用练习5). 创建工作空间6). 创建 ROS 功能包和元功能包7). 编译ROS功能包8). 使用 ROS 节点9). 使用主…