Linux基本命令,用CRT查找内存泄漏

2019-11-28 04:02栏目:联系我们
TAG:

引用原文地址

《奔跑吧linux内核》3.2笔记,不足之处还望大家批评指正

目录操作

'cd /home/hadoop' 把/home/hadoop设置为当前目录
'cd ..'
返回上一级目录
'cd ~' 进入到当前Linux系统登录用户的主目录(或主文件夹)。在 Linux 系统中,~代表的是用户的主文件夹,即“/home/用户名”这个目录,如果当前登录用户名为 hadoop,则~就代表“/home/hadoop/”这个目录
'mkdir input'
在当前目录下创建input子目录
'mkdir -p src/main/scala' 在当前目录下,创建多级子目录src/main/scala
'mv spark-2.1.0 spark'
把spark-2.1.0目录重新命名为spark

建议阅读博文理解linux cfs调度器

查看

ls #查看当前目录中的文件
'ls -l ' 查看文件和目录的权限信息
'cat /proc/version'
查看Linux系统内核版本信息
'cat /home/hadoop/word.txt ' 把/home/hadoop/word.txt这个文件全部内容显示到屏幕上
'cat file1 file2 > file3'
把当前目录下的file1和file2两个文件进行合并生成文件file3
'head -5 word.txt' *把当前目录下的word.txt文件中的前5行内容显示到屏幕上

 

  进程大致可以分为交互式进程批处理进程实时进程。对于不同的进程采用不同的调度策略,目前Linux内核中默认实现了4种调度策略,分别是deadline、realtime、CFS和idle,分别适用struct sched_class来定义调度类。

复制、删除

'cp /home/hadoop/word.txt /usr/local/ ' 把/home/hadoop/word.txt文件复制到“/usr/local”目录下
'rm ./word.txt'
删除当前目录下的word.txt文件
'rm –r ./test ' 删除当前目录下的test目录及其下面的所有文件
'rm –r test
' *删除当面目录下所有以test开头的目录和文件

1. 在program中严格按下面顺序include

  4种调度类通过next指针串联在一起,用户空间程序可以使用调度策略API函数(sched_setscheduler())来设定用户进程的调度策略。

解压

'tar -zxf ~/下载/spark-2.1.0.tgz -C /usr/local/' *把spark-2.1.0.tgz这个压缩文件解压到/usr/local目录下

  1 #define _CRTDBG_MAP_ALLOC
  2 #include <stdlib.h>
  3 #include <crtdbg.h>

问题一:请简述对进程调度器的理解,早起Linux内核调度器(包括O(N)和O(1))调度器是如何工作的?

授权

'chown -R hadoop:hadoop ./spark ' hadoop是当前登录Linux系统的用户名,把当前目录下的spark子目录的所有权限,赋予给用户hadoop
'ifconfig'
查看本机IP地址信息
'exit ' *退出并关闭Linux终端

 

  调度器是按一定的方式对进程进行调度的一种机制,需要为各个普通进程尽可能公平地共享CPU时间。

2. 必须是Debug版的build

  O(N)调度器发布与1992年,从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程。每一个进程有一个固定时间片,当进程时间片使用完之后,调度器会选择下一个调度进程,当所有进程都运行一遍后再重新分配时间片。这个调度器选择下一个调度进程前需要遍历整个就绪队列,花费O(N)时间。

Q : LiteServer遍Debug可能会遇到一些问题

  O(1)调度器用于Linux2.6.23内核之前,它为每个CPU维护一组进程优先级队列,每个优先级一个队列,这样在选择下一个进程时,只要查询优先级队列相应的位图即可知道哪个队列中有就绪进程,查询时间常数为O(1)。

A : 可以用来验证Memcheck是否有误报。

问题二:请简述进程优先级、nice和权重之间的关系。

    可以在对应的地址处下断点(会频繁断在malloc上,需要根据size下条件断点)

  内核使用0~139的数值表示进程的优先级,数值越低优先级越高。优先级0~99给实时进程使用,100~139给普通进程使用。在用户空间由一个传统的变量nice值映射到普通进程的优先级(100~139)。

Q : code在Release和Debug版下可能会不一样,最后可能会出现一个有memory leak一个没有

  nice值从-20~19,进程默认的nice值为0。这可以理解为40个等级,nice值越高,则优先级越低,反之亦然。(nice每变化1,则相应的进程获得CPU的时间就改变10%)。

 

  权重信息即为调度实体的权重,为了计算方便,内核约定nice值为0的权重值为1024,其他的nice值对应相应的权重值可以通过查表的方式来获取,表即为prio_to_weight。

3. "#define _CRTDBG_MAP_ALLOC"这个宏不能省略,否则memory leak的dump会缺少一些细节(如leak的code位置信息)

问题三:请简述CFS调度器是如何工作的。

 

  CFS调度器抛弃以前固定时间片和固定调度周期的算法,采用进程权重值的比重来量化和计算实际运行时间。引入虚拟时钟的概念,每个进程的虚拟时间是实际运行时间相对nice值为0的权重的比例值。进程按照各自不同的速率比在物理时钟节拍内前进。nice值小的进程,优先级高且权重大,其虚拟时钟比真实时钟跑得慢,但是可以获得比较多的运行时间;反之,nice值大的进程,优先级低,权重也低,其虚拟时钟比真实时钟跑得快,获得比较少的运行时间。CFS调度器总是选择虚拟时钟跑得慢的进程,类似一个多级变速箱,nice值为0的进程是基准齿轮,其他各个进程在不同变速比下相互追赶,从而达到公正公平。

4. 在app exit前,可以调用这个function打印memory leak report

问题四:CFS调度器中的vruntime是如何计算的?

版权声明:本文由ag真人发布于联系我们,转载请注明出处:Linux基本命令,用CRT查找内存泄漏