Commit d01a7720 authored by ktu's avatar ktu
Browse files

update devDocs, settle down project file tree

parent 61d17f72
No related merge requests found
Showing with 55 additions and 0 deletions
+55 -0
MIT License
Copyright (C) 2022 ktu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
......
# 2022/4/29
# 成员
* 涂楷
* 张博琪
* 石佳欣
# 题目选择
<a href="https://github.com/oscomp/proj160-osmatch-crash-collection">基于Linux系统的崩溃收集及崩溃日志生成组件</a>
## 为什么
1. Linux系统在学习和工作中都会有涉及,了解Linux对于进程崩溃的处理能有效帮助我们学习到操作系统相关的知识
2. 崩溃机制的深入理解对于我们日后编程中debug和维护代码都会有很大帮助
## 做什么
1. 了解Linux coredump的机制、core文件包含的信息
2. 学习思考如何有效地从core文件中提取信息并用来生成崩溃日志
# 一些思考
1. 该如何让程序知道core文件生成并获取其存储路径?
2. core文件生成有没有可能消耗大量系统资源?
\ No newline at end of file
# 2022/4/30
# 关于00的思考
1. Linux内核2.6.13版本新增的inotify提供了一种监控文件系统事件的机制,可监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。
2. 如果涉及到的文件占用内存大,那么core文件的大小也会变得很大,虽然可以限制core文件大小,但这样很可能会导致最终的core文件无法准确记录进程崩溃时的函数栈等信息,且超大的core文件生成过程的确很占资源,影响使用体验
# 新的想法
在Linux中,经常会用<code>ps</code><code>ps aux</code>来获取进程信息,通过<code>system</code>之类的API调用并比较以获取新进程的pid并用strace跟踪。
\ No newline at end of file
# 2022/4/30
# 关于01的新想法
1. 调用频次太频繁也会影响系统性能,频率太低监控效果又很差,频率难确定
2. 大量调用会产生很多冗余数据,需要做频繁的数据更新否则会导致数据量巨大
# 实时监控
内核作为操作系统的关键,必然可以监测到进程的各种状态,那么要实时监控进程的最优解应该是与内核通讯以获取进程新建与结束的信号。Linux内核2.6.14版本中向netlink socket加入Kernel Connector的特性,而这种特性正好就可以用来获取进程启动与退出的事件信号。<br>
在Unix系统中,“一切皆文件”,而/proc/pid中就记录了对应进程的各种信息。在内核监听器监听到进程退出的信号时,立刻截获记录在/proc/pid中的相关信息,或在监听到进程启动时就使用strace跟踪,写入缓存文件,如果正常退出则删除缓存文件,异常退出则将缓存文件转写为崩溃日志。
# 指导老师意见
> 疑问:
> 1. 监听器是否可以捕获比监听器启动早的进程
> 2. strace过多是否会有性能问题
> 3. 是否可以监听到完整的函数调用栈
> 4. 如果监听器异常是否可以处理
> 如果这些问题能处理的话,这种方案基本是可行的。而且由于整套自主实现,过程也更可控,发挥空间更大。
# 最终计划
现有的两种思路均有利弊,我们决定采取折中的方式,将两种方式拆分为不同的组件,同时把程序改为shell命令调用的形式,通过不同的参数调用不同的监听方法,例如<code>spwM -c</code>代表使用coredump机制,<code>spwM -s</code>使用strace跟踪,前者适用于进程多但占用内存小的情况,后者则适用于进程少但可能占用内存大的情况。
# 额外目标
* 如果项目进度允许,考虑扩展功能组件,实现类似开机自启动、提供读取其他elf文件的接口等
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment