诺志
软硬件开发技术笔记

目前已知的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命令,但是内容显示的比较少,需要安装补充内容

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

...

方法一 通过setopt参数覆盖默认reposdir配置

setopt的作用是可以设置/etc/yum.conf中的属性值,也可以说是覆盖那些属性信息。

方法二 修改/etc/yum.conf配置文件,指定reposdir参数

...

寻找mount源码来源util-linux-xxx/sys-utils/mount.cmk_exit_code函数

结论:
如代码所示,当底层存储返回EACCESEROFS错误返回码,会给出相应的提示,然后通过goto try_readonly;重新以readonly的方式尝试挂载。
所以mount只是在第一次挂载是感知到错误后,尝试以readonly的方式挂载。

...

qemu要运行aarch64必须先安装aarch64支持:qemu-system-aarch64,centos/rhel下该包需要自己编译安装,Fedora源带该包,为简单操作本文直接在Fedora上实践

宿主机选用的Fedora版本 : Fedora-Server-dvd-x86_64-30-1.2.iso
虚拟机选用的rhel-7.4-aarch64版本 : rhel-alt-server-7.4-aarch64-dvd.iso (用centos的aarch64也可以)

配置桥接目的是在后面安装好的aarch64系统里面可以配置和宿主机Fedora在同一个网段的IP,如果不需要桥接,该章节可以跳过

...

1.配置dns,保证机器可以使用公网网络源
2.额外添加几个盘,作为数据盘,此处我加了/dev/vdb /dev/vdc /dev/vdd三块100G的盘

添加centos源和epel源,本文全部使用阿里云的源

添加ceph源,在/etc/yum.repos.d/目录下创建ceph.repo文件,粘贴以下内容

...

先将.vmdk格式转换为.qcow2

安装依赖包后就可以挂载了,/tmp/x目录下就是镜像里面的文件了

问题一,找不到libvirt服务,可能是libvirtd没有启动,启动一下即可

...

点击 “文件->新建” 此处的ip改成你自己服务器的IP,上面的名称无所谓

购买云主机时,如果选的密钥验证的话,此处必须使用密钥登录,.pem是你在阿里云控制台创建密钥的时候生产的,在阿里云控制台上应该也可以下载

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