首页 > 系统相关 >Linux基础 - 服务管理 supervisor自启动问题

Linux基础 - 服务管理 supervisor自启动问题

时间:2023-02-19 21:57:34浏览次数:58  
标签:slice java 启动 开机 自启 Linux 自启动 supervisor

 

一、 supervisor 自启动问题

1.1 Supervisor自启动导致无法使用环境变量

编写systemd文件,使用systemd启动。 在supervisord.conf配置文件中使用/etc/profile中的环境变量则无法正常启动。

如进程启动命令为 command = %(ENV_JDK_PATH)s %(ENV_SMALL_JVM_MEMORY)s -jar %(ENV_ONESRM_PATH)s/libs/%(program_name)s-%(ENV_PROGRAM_VERSION)s.jar %(ENV_RUN_PARAM)s

其中JDK_PATH等变量为/etc/profile中的环境变量。若使用systemd开机自启,无法载入环境变量,supervisor启动报错。

解决方式: 使用/etc/init.d/after.local文件自启,在文件中首先source /etc/profile,然后使用命令启动supervisor,即可开机自启并载入环境变量。

 

1.2 Supervisor管理java出现OOM问题( 非CentOS7系统 )

supervisor管理java进程, 启动报错:java.lang.OutOfMemoryError: unable to create new native thread

如果不设置supervisor开机自启,开机后手动使用命令启动supervisor,再启动java,所有java进程都可稳定运行,只有supervisor开机自启时,java进程才会出现OOM的问题。

对比手动启动与开机自启supervisor两个进程有什么区别,发现只有Control Group不一样,手动启动为user.slice,开机自启为system.slice。

 

开机自启supervisor的控制组/system.slice/after-local.service的最大任务数被限制为512个,

使用systemd-cgtop监控java进程启动时的task情况,发现java进程启动到7-9个时,task数量刚好到512个,一旦超过512个task,整个java进程都会被强行停止,并且重启,反复重启无法启动时,java进程便会报OOM的异常。

因为开机自启的进程较多,/system.slice/after-local.service控制组除java进程外的task数量较多,

而手动启动supervisor时,/user.slice/user-0.slice除java进程外的task数量少,所以即使java全部启动,也达不到/user.slice/user-0.slice的512task限制,所以手动启动supervisor无OOM的问题。


task数量为512限制可在文件/sys/fs/cgroup/pids/system.slice/after-local.service/pids.max中查看,

将 DefaultTasksMax=2048 添加至/etc/systemd/system.conf文件,可永久修改cgroup最大task限制。

修改为2048后,supervisor开机自启,启动java进程再无OOM问题,至此问题解决。

 

标签:slice,java,启动,开机,自启,Linux,自启动,supervisor
From: https://www.cnblogs.com/kingdomer/p/16934701.html

相关文章

  • Linux、Rust、C++学习笔记(day1)
    序言从今天开始以Ubuntu22.04为开发环境,学习Linux、Rust和C++的开发。博文作为个人学习记录和分享,欢迎各位与笔者讨论交流!开发环境搭建我的机器是腾讯云的云服务器。腾......
  • Linux基础 - 服务管理 supervisor
     一、supervisor 1.1 supervisor 介绍 Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它,可以运行在各种类unix系统上。Supervisor......
  • Linux基础 - 服务管理 Unit配置文件
     一、配置文件的格式1.配置文件的区块名和字段名,都是大小写敏感的。2.每个区块内部是一些等号连接的键值对,键值对的等号两侧不能有空格。[root@cl-server~]#sys......
  • Linux基础 - 服务管理 systemctl
     一、UnitSystemd可以管理所有系统资源,不同的资源统称为Unit(单位)。Unit一共分成12种。Serviceunit:  系统服务, 封装守护进程的启动、停止、重启和重载操作......
  • Linux基础 - 服务管理 systemd
     一、systemd引入1.1sysv引导启动Linux的启动之前采用init进程。启动服务:servicehttpdstart或/etc/init.d/httpdstartinit这种方法有两个缺点。一是启动时......
  • linux limits.conf 生效,linux修改limits.conf不生效
    正常情况下,/etc/security/limits.conf的改动,应该在下次访问时就生效才对。一、修改方法1.临时方法为了优化linux性能,可能需要修改这个最大值。临时修改的话ulimit-n......
  • Linux/VScode搭建Rust开发环境
    1、Linux下搭建Rust开发环境1.1、使用Rustup安装  执行如下命令curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|sh  执行结果如下:  在这里使用......
  • RabbitMq 在centos中开机自启动
    转自:https://www.cnblogs.com/chenyishi/p/13914166.html RabbitMq在centos中开机自启动 1.在/etc/init.d目录下新建一个rabbitmq[[email protected]]#v......
  • Linux系统之时间管理
    (Linux系统之时间管理)一、date命令介绍1.date帮助[root@tianyi~]#dateMonSep620:56:57CST2021[root@tianyi~]#date--helpUsage:date[OPTION]...[+FORM......
  • LVS(Linux Virtual Server)+Nginx 高可用集群
    LVS(Linux虚拟服务器)LVS(LinuxVirtualServer)是一个开源的负载均衡项目,是国内最早出现的开源项目之一,目前已被集成到Linux内核模块中。该项目在Linux内核中实现了基于......