诺志
软硬件开发技术笔记

目前已知的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,可以触发的信号有很多,常用的的信号SIGABRTSIGSEGV

...

温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息

操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容

部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息

...

温故知新,任何一个初学linux的教程,都会介绍man的使用,以前感觉作用不大
偶尔在别人的博文中看到man的介绍,才正儿八经的看了下man的使用,记录一下
通过几个例子介绍下不同类别的帮助信息

操作系统默认带有man命令,但是内容显示的比较少,需要安装补充内容

部分帮助信息有中文版本,可以通过安装下面的包获取中文帮助信息

...
2022-02-23

简单一个例子介绍eventfd的使用,其中包括阻塞和非阻塞两种方式

...

从源码安装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并启动

...
2022-01-16

本文简单记录下在centos7.6 1801上安装和使用docker的过程

以centos7.6minimal安装(最小化安装)为基础环境

默认使用操作系统自带的源也可以,不过下载包可能比较慢,本文使用aliyun的源替代操作系统自带源

...

使用的zookeeper版本为zookeeper-release-3.4.14
当版本和其他版本可通过zookeeper项目下载
当前版本也可以从本站备份下载
本文在centos7.6上编译,其他平台操作类似

以centos7.6 minimal安装(最小化安装)为基础环境

默认使用操作系统自带的源也可以,不过下载包可能比较慢,本文使用aliyun的源替代操作系统自带源

...
分类
2篇
c
1篇
8篇
18篇
8篇
2篇
搜索