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

news2024/12/25 13:21:02

大家好,我是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.coloradmin.cn/o/1224474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像分类(二) 全面解读复现ZFNet

网络详解 前言:ZF网络是2013年提出的,网上有很多关于它的介绍和讲解,但是很多内容讲的不太好(个人感觉),于是花时间收集了一些资料,整理了一些比较好的文章,从头到尾把ZFNet说了一遍…

ControlNet原理及应用

《Adding Conditional Control to Text-to-Image Diffusion Models》 目录 1.背景介绍 2.原理详解 2.1 Controlnet 2.2 用于Stable Diffusion的ControlNet 2.3 训练 2.4 推理 3.实验结果 3.1 定性结果 3.2 消融实验 3.3 和之前结果比较 3.4 数据集大小的影响 4.结…

最常用的结构体初始化方式

结构体最常用的初始化方式就是用memset把这块区域清0 注意不能这么写 STU stu[5]; stu (STU*)malloc(sizeof(stu)); 数组名不允许被赋值,它只是个表达式

【Python】Loguru模块更简洁的日志记录库

Loguru: 更优雅的日志记录解决方案! loguru 是一个Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。 使用自带自带的 logging 模块的话,则需要…

ZHUTI主提2024春夏 聆听「宁静的声音」

将自然艺术触达生活 生活与艺术实践活动 ZHUTI主提2024春夏艺术活动「宁静的声音」,将自然艺术真实的触达生活为核心,将原野聚会、黑胶音乐、插花、咖啡、食物、舞蹈、服装等艺术与生活的元素组合在这场芦苇荡中,用一场兼具无穷畅想和独特审…

μC/OS-II---事件标志组管理1(os_flag.c)

目录 事件标志组创建事件标志组删除事件标志组获取/等待当任务要与多个事件同步时,就要使用事件标志组。一个事件标志就是一个二值信号,事件标志组是若干二值信号的组合。使用事件标志组同步任务分为独立性同步和关联性同步。事件标志组创建 flags:事件标志组的初始值。OS_F…

Python中的实例属性和类属性

在这篇文章中,我们将探讨Python中的类是如何工作的,主要介绍实例和类的属性。这些属性是什么,它们之间的区别,以及创建和利用它们的python方法。 类属性与实例属性 首先,我们需要知道什么是实例。实例是属于类的对象。…

麒麟 ZYJ 服务器软件适配 参考示例

一、zyj 环境简介 1. ZYJ 概述 国产化 SMZYJ 是由国家 BM 主管部门鉴定并批准生产使用的国内自主开发的 整机 JM 国标设备,设备采用了自主设备基础硬件(飞腾、国科微等)、安全硬 件自主固件(昆仑等)自主 SM 专用操作…

Linux嵌入式I2C协议笔记

硬件: 1.I2C结构 在一个SOC中有一个或者多个I2C控制器,一个I2C控制器可以连接一个或多个I2C设备。 I2C总线需要两条线,时钟线SCL和数据线SDA 2.I2C传输数据格式 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。结束信号(P):SCL为高电平时,SDA…

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

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

【C++】类和对象(7)--友元, static成员

目录 一 友元 1 友元概念 2 友元函数 3 友元类 二 static成员 1 概念 2 用法 3 static成员特性 4 例题 一 友元 1 友元概念 友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以 友元不宜多用。 …

【C/C++笔试练习】继承和派生的概念、虚函数的概念、派生类的析构函数、纯虚函数的概念、动态编译、多态的实现、参数解析、跳石板

文章目录 C/C笔试练习选择部分(1)继承和派生的概念(2)程序分析(3)虚函数的概念(4)派生类的析构函数(5)纯虚函数的概念(6)动态编译&…

安装银河麒麟linux系统docker(docker-compose)环境,注意事项(一定能解决,有环境资源)

1:安装docker环境必须使用麒麟的版本如下 2:使用docker-compse up -d启动容器遇到的文件 故障1:如果运行docker-compose up 报“Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files”…

webAPP基础学习

###视觉基础 part-I ####1.面试中常见的像素问题 >什么是像素? *1.什么是px? px-虚拟像素,css像素的单位 px是一个相对单位,相对于设备像素而言 >相对性 a.相对于同一个设备,css像素的可变的 css像素物理像素>会受到缩放的影响 css像素缩放倍数*单个物理像…

我认为除了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…

量化交易:传统小市值策略 VS AI市值策略

在BigQuant平台上可以快速开发股票传统策略和股票AI策略,今天拿市值因子来练手,看看两个策略在2015-01-01到2016-12-31这两年时间各自的收益风险情形。 市值因子是国内股票市场能够带来超额收益的alpha因子,已经被验证为长期有效的因子&…

国内优质企业网盘推荐:满足您的文件存储与共享需求

企业网盘是主要用于企业工作过程中给的文件存储、共享以及协作。很多用户在挑选文件协作工具时更偏爱国内的工具,原因是使用上可能更贴合国人的使用习惯! 那么现在国内做的比较好的企业网盘有什么? Zoho Workdrive企业网盘,ZOHO…

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

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

实战提升(六)

前言:Practice makes perfect!今天实战Leetcode链表分割还有回文结构。今天的题全都来自于牛客网。 实战一: 思路:我们一这个链表为例,小于5的链表尾插到第一个链表,大于5的链表尾插到第二个链表&#xf…

性能测试常见问题总结

01 硬件上的性能瓶颈 指的是CPU、内存、I/O读写速率,磁盘空间方面的问题。 02 网络上的性能瓶颈 指的网络带宽,网络波动,延时,丢包等。 03 应用程序上的性能瓶颈 指的是开发人员新开发出来的应用程序。 04 数据库的性能瓶颈…