目前已知的3种方法都有一定的局限性,不能很完美实现当进程内存泄漏时杀掉进程
1. systemd的服务配置中增加MemoryMax=XXX的配置项,该配置项仅能限住物理内存,如何服务器未配置swap,内存达到时则会触发oom杀掉进程。如果服务器配置swap,将继续消耗swap直到swap也消耗完,systemd还有一个MemorySwapMax=XXX配置项可以限制swap,但是除非很新的操作系统使用了cgroup2该配置项才能生效。
2. systemd配置的MemoryMax=XXX参数,会同时作用到被主进程拉起的其他进程,如主进程拉起mysql进程,虽然systemd的MemoryMax参数是作用在主进程上,但是mysql会继承该限制。原因是MemoryMax参数是通过cgroup生效的,systemd启动的主进程和子进程都将在该cgroup组中。
3. ulimit和prlimit设置进程最大内存地址,这两种方式是作用在系统函数行为上,比如malloc分配内存时被限制了内存上限,内存分配不出来的时候panic,但是如果上层调用捕获了这个异常,程序就不会退出了,并不会处罚oom杀掉进程。
当前机器cgroup为v1,若是v2将显示为cgroup2fs
测试脚本
该脚本使用python构造一个很大的内存,触发方式是在/root下创建start文件,touch /root/start
,用其他语言可以类似
程序运行过程中发现有内存泄漏,需要主动触发coredump用于分析,可以按以下步骤操作
本质是通过kill
命令发送信号触发coredump
,可以触发的信号有很多,常用的的信号SIGABRT
或SIGSEGV
温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息
操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容
部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息
温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息
操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容
部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息
从源码安装python3
本文在centos7.6系统上实践
此处下载最新的3.9.9版本,其他版本可以自行到https://www.python.org/ftp/python/
查看
/opt/python-3.9.9
可以根据习惯更换路径
python3安装后,不要卸载原有python2的任何包,因为python3和python2有很多不兼容的地方
操作系统有很多工具都依赖原有的python2,直接替换会导致包括在yum
在内的很多包不可用
简单介绍virtualenv的使用和原理
本文在centos7.6系统上实践
可以通过pip或者yum安装virtualenv,推荐使用pip安装,因为pip安装版本较新,老版本有些参数已经在新版本中废弃
pip安装virtualenv
yum安装virtualenv
本文演示如何在docker中运行zookeeper,以及链接方式
centos7.6系统上实验,其他环境操作类似
已经搭建好docker环境的本章节可以跳过
docker基本使用可以参见之前的文章,此处仅简单描述安装docker过程
宿主机准备源:
安装docker并启动
本文简单记录下在centos7.6 1801上安装和使用docker的过程
以centos7.6minimal安装(最小化安装)为基础环境
默认使用操作系统自带的源也可以,不过下载包可能比较慢,本文使用aliyun的源替代操作系统自带源