【Linux系统】常驻进程应用实践

简介: 上一篇关于常驻进程/守护进程的文章,介绍了守护进程的一些基本概念,本篇将介绍工作经历中的一个真实应用场景,以及遇到的问题,和当时的解决方法。

系列文章:

【Linux 系统】关于守护进程

一 概述

   系列的上一篇文章,介绍了守护进程的一些基本概念,本篇将介绍工作经历中的一个真实应用场景,以及遇到的问题,和当时的解决方法。

二 场景

   在某老东家工作期间,所在部门使用php进行业务开发,框架laravel。业务代码部署,也是包括web和脚本/任务两大体系。web服务提供接口,脚本机上的服务执行任务,包括kafka消息消费、laravel队列消息处理和定时任务执行等等。

   脚本机部署形态:入职初期,消费进程包括kafka-consumer,两个laravel(异步)队列进程queue:work,按照消息处理的紧迫程度定义了时效层面的优先级(low,middle,...)。

   启动方式:通过artisan方式启动进程,以独立进程形态存在于操作系统中。而启动脚本会以service的形式,部署(配置)在/etc/systemd/system下,也就是前面提到过的linux守护进程,文件名类似: /etc/systemd/system/xxx.xxx.service

artisan命令在上述守护进程的配置文件中(实际上,在最终层面是通过sh run.sh执行脚本的启动运行)。

三 案例及遇到的问题

常驻进程的生命周期如下图所示:

当我们重新发布代码时,对脚本这部分来说,部署过程就是:

1、覆盖新代码

2、终止旧的进程

3、启动新的进程

第二步的终止进程,是通过系统的kill pid命令来进行的,而这种方式相当于kill -15 pid,即通过-15信号量,通知系统要进行资源回收,并终止进程。

但实际的发布时,会出现kill 失败的情况,而jenkins中编写的命令为了应对这个问题,加上了等待90s后通过kill -9 pid强杀来终止旧进程。kill pid失败的情况这在当时导致了两个问题:

1)部署时间过长,因为很多kill pid执行失败的情况发生,所以每次都需要等待90s

2)kill -9 pid是非常危险的命令。因为来不及做资源回收,在存在父子进程时,强杀父进程导致出现孤儿进程,后续发布也存在无法发布成功的情况。

最终与其他技术同学一起解决这个问题,当时是由于laravel框架对进程、信号量管理、php版本支持上的一些问题导致的。再重写进程管理、信号量handler之后,问题得以解决。

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
14天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
52 3
|
14天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
39 2
|
8天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
14 3
|
14天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
56 8
|
11天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
27 1
|
11天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
14天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
48 3
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
179 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。