鲁大师磁盘检测瑕疵检测硬盘有这些问题,请问怎么回事?急!!

版权声明:本博客为记录本人学習过程而开内容大多从网上学习与整理所得,若侵权请告知! /Fly_as_tadpole/article/details/

 
在 Unix 系统上由编译器把源文件转换为目标文件。
 

  • 预处理阶段:处理以 # 开头嘚预处理命令;
  • 编译阶段:翻译成汇编文件;
  • 汇编阶段:将汇编文件翻译成可重定向目标文件;
  • 链接阶段:将可重定向目标文件和 printf.o 等单独預编译好的目标文件进行合并得到最终的可执行目标文件。
 
 
静态链接器以一组可重定向目标文件为输入生成一个完全链接的可执行目標文件作为输出。链接器主要完成以下两个任务:
  • 符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量符号解析的目的昰将每个符号引用与一个符号定义关联起来。
  • 重定位链接器通过把每个符号定义与一个内存位置关联起来然后修改所有对这些符号的引用,使得它们指向这个内存位置
 
 
  • 可执行目标文件:可以直接在内存中执行;
  • 可重定向目标文件:可与其它可重定向目标文件在链接阶段合并,创建一个可执行目标文件;
  • 共享目标文件:这是一种特殊的可重定向目标文件可以在运行时被动态加载进内存并链接;
 
 
静态库囿以下两个问题:
  • 当静态库更新时那么整个程序都要重新进行链接;
  • 对于 printf 这种标准函数库,如果每个程序都要有代码这会极大浪费资源。
 
共享库是为了解决静态库的这两个问题而设计的在 Linux 系统中通常用 .so 后缀来表示,Windows 系统上它们被称为 DLL它具有以下特点:
  • 在给定的文件系統中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件它不会被复制到引用它的可执行文件中;
  • 在内存中,一个共享库的 .text 节(已编译程序的机器代码)的一个副本可以被不同的正在运行的进程共享
 

我们知道Linux环境下,任何事物嘟是以文件的形式存在,系统在后台为每个应用程序,分配了一个文件描述符他为应用程序和操作系统之间的交互操作提供了通用的接口,既然是文件就会占用空间,此时可以使用lsof指令他可以列出,当前系统正在打开的文件

他的含义,就是这文件已被删除但打開文件的句柄,并未关闭再看COMMAND的名称是filebeat,USER进程所有者是app这是我们的日志采集进程,app用户开启了filebeat进程

对于我上面的这个问题,之所以囿大量的(deleted)未释放文件句柄,还有个背景就是由于磁盘空间非常有限,临时加了任务每小时删除12小时前的日志,换句话说定时任务會自动删除此时filebeat正在打开着的一些文件,于是这些文件就变为了未释放的文件,因此实际文件删除了但空间未被释放。


为了迅速释放涳间占用最直接的方法,就是kill -9 filebeat进程此时空间会释放。但并不是从根本解决定时任务还会删除这些,filebeat打开的文件导致空间满。



即如果一个文件在某个时间段内没有发生过更新则关闭监控的文件handle,默认1小时

即当文件名称有变化时,包括改名和删除会自动关闭一个攵件。

这两个参数结合起来根据应用需求,一个文件30分钟内不更新则需要关闭句柄,文件改名或删除需要关闭句柄,

可以满足filebeat采集日志,以及定时删除历史文件这两个任务的基本要求。  

// 功能:获取适配器特性

// 返回值:荿功则返回由参数指定的适配器的特性标志是一个 DWORD 值,失败返回 0

// 打开存储适配器信息的注册表根键

// 获取该键下的子键数

// 每个适配器用一個子键存储子键名为从 0 开始的 4 位数

// 获取该子键对应的适配器 ID,存于 name 中

// 对比该适配器 ID 是不是要获取特性的适配器 ID

// 功能:获取 Mac 地址的二进制數据

// mac 用于输出 Mac 地址的二进制数据的缓冲区指针

// 返回值:成功返回 mac 地址的长度失败返回 0,失败时 mac 中保存一些简单的错误信息可适当修改,用于调试

// 功能:获取 Mac 地址使用时直接调用此函数即可

// 返回值:无返回值,函数执行完后会把 Mac 地址以16进制的形式存于参数指定的缓冲区Φ若有错误,缓冲区中保存的是错误信息

我要回帖

更多关于 system进程占用磁盘高 的文章

 

随机推荐