t*******i 发帖数: 4960 | |
f****4 发帖数: 1359 | 2 你的意思,应该是不中断程序的情况下找到那里有memory leak吧?
要fix的话总是要重新编译,重新run的啊
code review+log |
t*******i 发帖数: 4960 | 3 code review ,如果是几十万行的代码。。。
log,具体需要记录什么才行?如果设计的时候没有记录内存分配释放的信息呢?
这两个其实我都说了,面试的人明显不满意。。。也不能单独设立一套系统来测试,因
为问题可能是跟运行环境相关的。 |
l*********8 发帖数: 4642 | |
t*******i 发帖数: 4960 | |
f****4 发帖数: 1359 | 6 log是让你用来分析系统到底在做什么,很多时候memory leak发生在一些特定的边界条
件没处理的情况下面。那么你的log就要记录有些边界条件发生了。那么在持续memory
leak的时候,你就能看到log里面有连续的边界条件发生。
code review不是让你把整个系统review。你应该假设之前系统的release没有memory
leak,新增代码导致的问题。这个假设绝大多数情况是成立的。那么你分析log,知道
系统一直在run哪些模块,再去看那些模块里面新增代码是否有问题。
至于你说的面试的人明显不满意,是不是你理解错人家意思了啊?
这么说吧,不中断程序,那是否允许你备份数据然后在别的机器上run&debug这个程序
?如果可以,重载new/malloc,delete/free,把所有memory 操作&地址log出来,一比
较就知道哪些没释放了。
或者,直接用代码分析工具分析。
【在 t*******i 的大作中提到】 : code review ,如果是几十万行的代码。。。 : log,具体需要记录什么才行?如果设计的时候没有记录内存分配释放的信息呢? : 这两个其实我都说了,面试的人明显不满意。。。也不能单独设立一套系统来测试,因 : 为问题可能是跟运行环境相关的。
|
t*******i 发帖数: 4960 | 7 当时是第一次面试,一下子蒙了,没想到这么多。感觉对方就是说,有个设备在客户那
里,现在发现问题了,你可以远程连过去。程序不能中断,客户要用,所以不能debug
。单独安装一套系统来debug的话,由于环境不一样,不一定能发现问题,所以要是得
去诊断客户那套运行的系统,然后我脑子就不work了。我说检查代码,对方说小程序还
好,几十万行的代码你怎么检查。我问有没有log,对方反问我什么log。
反正我就晕菜了。
memory
【在 f****4 的大作中提到】 : log是让你用来分析系统到底在做什么,很多时候memory leak发生在一些特定的边界条 : 件没处理的情况下面。那么你的log就要记录有些边界条件发生了。那么在持续memory : leak的时候,你就能看到log里面有连续的边界条件发生。 : code review不是让你把整个系统review。你应该假设之前系统的release没有memory : leak,新增代码导致的问题。这个假设绝大多数情况是成立的。那么你分析log,知道 : 系统一直在run哪些模块,再去看那些模块里面新增代码是否有问题。 : 至于你说的面试的人明显不满意,是不是你理解错人家意思了啊? : 这么说吧,不中断程序,那是否允许你备份数据然后在别的机器上run&debug这个程序 : ?如果可以,重载new/malloc,delete/free,把所有memory 操作&地址log出来,一比 : 较就知道哪些没释放了。
|
g*****k 发帖数: 623 | 8 对方想让你展开谈谈怎么用log来发现问题
debug
【在 t*******i 的大作中提到】 : 当时是第一次面试,一下子蒙了,没想到这么多。感觉对方就是说,有个设备在客户那 : 里,现在发现问题了,你可以远程连过去。程序不能中断,客户要用,所以不能debug : 。单独安装一套系统来debug的话,由于环境不一样,不一定能发现问题,所以要是得 : 去诊断客户那套运行的系统,然后我脑子就不work了。我说检查代码,对方说小程序还 : 好,几十万行的代码你怎么检查。我问有没有log,对方反问我什么log。 : 反正我就晕菜了。 : : memory
|
f****4 发帖数: 1359 | 9 要不,你给面试的人发个email follow一下,看看他到底想问啥,想得到怎么样的回答
。如果人家比较nice给你feedback的话和我们分享一下。
debug
【在 t*******i 的大作中提到】 : 当时是第一次面试,一下子蒙了,没想到这么多。感觉对方就是说,有个设备在客户那 : 里,现在发现问题了,你可以远程连过去。程序不能中断,客户要用,所以不能debug : 。单独安装一套系统来debug的话,由于环境不一样,不一定能发现问题,所以要是得 : 去诊断客户那套运行的系统,然后我脑子就不work了。我说检查代码,对方说小程序还 : 好,几十万行的代码你怎么检查。我问有没有log,对方反问我什么log。 : 反正我就晕菜了。 : : memory
|
t*******i 发帖数: 4960 | 10 除了看代码和log,另设系统来debug外,还有其他的好方法吗? 当时我的感觉是对方
觉得我的提议都不和他的意。。。而且那意思是,客户在那里等这呢,你得马上解决。
【在 g*****k 的大作中提到】 : 对方想让你展开谈谈怎么用log来发现问题 : : debug
|
|
|
t*******i 发帖数: 4960 | 11 这个,还是算了,当时我们的chemical就不怎么对。
我后来发现他问的问题好像大都可以从beginning linux porgramming里面找到答案,
里面谈到用valgrind 诊断 memory leak,我怀疑是不是有工具可以做这个。如果是
java的话,好像可以从虚拟机里得到memory 分配的情况。
【在 f****4 的大作中提到】 : 要不,你给面试的人发个email follow一下,看看他到底想问啥,想得到怎么样的回答 : 。如果人家比较nice给你feedback的话和我们分享一下。 : : debug
|
h**********8 发帖数: 267 | |
P**********c 发帖数: 3417 | 13 run valgrind这个一般的公司都是会做的。不过这个对自己管理的mempool沒有用。
【在 t*******i 的大作中提到】 : 这个,还是算了,当时我们的chemical就不怎么对。 : 我后来发现他问的问题好像大都可以从beginning linux porgramming里面找到答案, : 里面谈到用valgrind 诊断 memory leak,我怀疑是不是有工具可以做这个。如果是 : java的话,好像可以从虚拟机里得到memory 分配的情况。
|
d*******d 发帖数: 2050 | 14 可那也是inhouse test用的.
也没可能远程在客户那边不中断程序的情况下run阿.而且valgrind慢死了.
我想的是,suspend那边程序,然后gdb load那个process id,
然后呢?什么叫fix memory leak?手动release memory?如果这里头有自己定义管理的
mempool,且有相应的function到是有可能
【在 P**********c 的大作中提到】 : run valgrind这个一般的公司都是会做的。不过这个对自己管理的mempool沒有用。
|
c****p 发帖数: 6474 | 15 valgrind不是做这个的么
memory
【在 f****4 的大作中提到】 : log是让你用来分析系统到底在做什么,很多时候memory leak发生在一些特定的边界条 : 件没处理的情况下面。那么你的log就要记录有些边界条件发生了。那么在持续memory : leak的时候,你就能看到log里面有连续的边界条件发生。 : code review不是让你把整个系统review。你应该假设之前系统的release没有memory : leak,新增代码导致的问题。这个假设绝大多数情况是成立的。那么你分析log,知道 : 系统一直在run哪些模块,再去看那些模块里面新增代码是否有问题。 : 至于你说的面试的人明显不满意,是不是你理解错人家意思了啊? : 这么说吧,不中断程序,那是否允许你备份数据然后在别的机器上run&debug这个程序 : ?如果可以,重载new/malloc,delete/free,把所有memory 操作&地址log出来,一比 : 较就知道哪些没释放了。
|
t*******i 发帖数: 4960 | 16 gdb process id 有对客户影响吗?我记得我当时提到debug,对方很坚定地说,不能debug,客户程序要继续工作。
手动release memory有人根我提过,以前做网络系统集成方面,但是不会编程序,从另 外的角度看问题。我也有点怀疑这个是不是他想听到的,先救火,不行就定时手工释放,稳住客户再说。
如果有自己定义管理的mempool,且有相应的function到是有可能。能具体说说做法吗?
【在 d*******d 的大作中提到】 : 可那也是inhouse test用的. : 也没可能远程在客户那边不中断程序的情况下run阿.而且valgrind慢死了. : 我想的是,suspend那边程序,然后gdb load那个process id, : 然后呢?什么叫fix memory leak?手动release memory?如果这里头有自己定义管理的 : mempool,且有相应的function到是有可能
|
t*******i 发帖数: 4960 | 17 如果别的功能都正常,就是有memory leak,定时手工释放了也算解决问题了吧?
不过即使自己做的mempool也不好判断内存到底有没有被使用吧?尤其多线程的情况下。
不会是说在gbd里看哪些内存在用,然后自己来做吧。。。 |
f****4 发帖数: 1359 | 18 valgrind没怎么用过,如果我的主程序有while(1),一直在run,valgrind能够实时
report多少memory没释放么?
gdb p pid会把系统暂停的
自己管理mempool的话,如果可以手工释放memory的话,那么你的系统必定已经知道这
些memory是用完没有释放了,那样的话,还要你手工释放做啥?
【在 c****p 的大作中提到】 : valgrind不是做这个的么 : : memory
|
t*******i 发帖数: 4960 | 19 那还是解决不了问题啊。
还是只能code review + log啊? |
r*******n 发帖数: 344 | 20 我觉得如何找出泄露的模块和问题的root cause可能是面试官最想讨论的吧;然后就是
如何fix这个问题,他要求在系统进程或线程运行的过程中解决。
第一个问题,log应该是可以解决的,但要仔细地说说如何log,如果是写log太多,会影
响系统性能。可以自己设计系统内存监控程序,程序平时不写log,只做统计性的监控。
当某个模块在内存使用上behavior出了异常,它才把记录下的结果写入log。触发写log
的条件可以自己设计,也可以由用户的命令主动来实现。这个在产品卖出去之前,就应
该设计好的。
第二个问题,如何fix,我也很想了解一下。对于linux kernel module,如何可以fix问
题而不影响运行,做到绝对地不影响似乎很难?另外,如果是需要fix的是中断执行程序
,怎么办?
【在 t*******i 的大作中提到】 : 那还是解决不了问题啊。 : 还是只能code review + log啊?
|
|
|
t*******i 发帖数: 4960 | 21 这个职位确实是要求懂 linux kernel,看来还是我功力不够啊。
当时确实是问到log里面记什么,我觉得你的回答应该很对了。
期待怎么fix的答案早日出现。
会影
控。
log
fix问
程序
【在 r*******n 的大作中提到】 : 我觉得如何找出泄露的模块和问题的root cause可能是面试官最想讨论的吧;然后就是 : 如何fix这个问题,他要求在系统进程或线程运行的过程中解决。 : 第一个问题,log应该是可以解决的,但要仔细地说说如何log,如果是写log太多,会影 : 响系统性能。可以自己设计系统内存监控程序,程序平时不写log,只做统计性的监控。 : 当某个模块在内存使用上behavior出了异常,它才把记录下的结果写入log。触发写log : 的条件可以自己设计,也可以由用户的命令主动来实现。这个在产品卖出去之前,就应 : 该设计好的。 : 第二个问题,如何fix,我也很想了解一下。对于linux kernel module,如何可以fix问 : 题而不影响运行,做到绝对地不影响似乎很难?另外,如果是需要fix的是中断执行程序 : ,怎么办?
|
f****4 发帖数: 1359 | 22 这里要是回答log的话,我们得假设,系统已经实现了比较好的log功能,就像
roamersun说的那样。
如果面的人回答说“我们用的默认的malloc和free,系统完全没有log,你不能中断当
前程序,无法在本地重现该问题”——那除了代码分析工具就没如何办法可以解决了。
linux程序能否做到在某个时间点让程序从使用A动态库转换成B动态库啊?
假设A包含了原来有memory leak的函数fun()
B是fix 了 memory leak的函数fun()
对了,lz这是申请的啥职位,啥级别啊? |
t*******i 发帖数: 4960 | 23 啥职位就不足以道了,我看要求懂tcp/ip和linux kernel,这头一
个我懂,后一个是全不懂,本着70%(学历咱也够)沾边就投的原则就投了。
其实操作系统是我一个老板的强项啊,我就这么没出息了。
这个问题我答不出来一直耿耿于怀,所以跑来问一下。
【在 f****4 的大作中提到】 : 这里要是回答log的话,我们得假设,系统已经实现了比较好的log功能,就像 : roamersun说的那样。 : 如果面的人回答说“我们用的默认的malloc和free,系统完全没有log,你不能中断当 : 前程序,无法在本地重现该问题”——那除了代码分析工具就没如何办法可以解决了。 : linux程序能否做到在某个时间点让程序从使用A动态库转换成B动态库啊? : 假设A包含了原来有memory leak的函数fun() : B是fix 了 memory leak的函数fun() : 对了,lz这是申请的啥职位,啥级别啊?
|
s*****y 发帖数: 897 | 24 Fortinet or Juniper?
【在 t*******i 的大作中提到】 : 啥职位就不足以道了,我看要求懂tcp/ip和linux kernel,这头一 : 个我懂,后一个是全不懂,本着70%(学历咱也够)沾边就投的原则就投了。 : 其实操作系统是我一个老板的强项啊,我就这么没出息了。 : 这个问题我答不出来一直耿耿于怀,所以跑来问一下。
|
r*******n 发帖数: 344 | 25 没错,当面试官提出了这个问题,我们应该通过交流去了解他到底会给出什么样的条件
和背景。如果真的是泛泛而谈,那就只能自己cover所有的可能了。然后再建议如果你是
产品的设计者,你会怎么做才会使这个问题暴露时更容易定位root cause.
你说的动态库其实类似于打补丁的方法,找到要替换函数的地址,然后替换。但是对于
中断处理函数恐怕不行,有没有可行的办法?
【在 f****4 的大作中提到】 : 这里要是回答log的话,我们得假设,系统已经实现了比较好的log功能,就像 : roamersun说的那样。 : 如果面的人回答说“我们用的默认的malloc和free,系统完全没有log,你不能中断当 : 前程序,无法在本地重现该问题”——那除了代码分析工具就没如何办法可以解决了。 : linux程序能否做到在某个时间点让程序从使用A动态库转换成B动态库啊? : 假设A包含了原来有memory leak的函数fun() : B是fix 了 memory leak的函数fun() : 对了,lz这是申请的啥职位,啥级别啊?
|
t*******i 发帖数: 4960 | 26 介绍一下有哪些代码分析工具?我从来没用过。。。
【在 f****4 的大作中提到】 : 这里要是回答log的话,我们得假设,系统已经实现了比较好的log功能,就像 : roamersun说的那样。 : 如果面的人回答说“我们用的默认的malloc和free,系统完全没有log,你不能中断当 : 前程序,无法在本地重现该问题”——那除了代码分析工具就没如何办法可以解决了。 : linux程序能否做到在某个时间点让程序从使用A动态库转换成B动态库啊? : 假设A包含了原来有memory leak的函数fun() : B是fix 了 memory leak的函数fun() : 对了,lz这是申请的啥职位,啥级别啊?
|
f****4 发帖数: 1359 | 27 我听说过 coverity,没用过
【在 t*******i 的大作中提到】 : 介绍一下有哪些代码分析工具?我从来没用过。。。
|
k****n 发帖数: 1334 | 28 这哥们态度不好,不过应该是log这条路走下去了
debug
【在 t*******i 的大作中提到】 : 当时是第一次面试,一下子蒙了,没想到这么多。感觉对方就是说,有个设备在客户那 : 里,现在发现问题了,你可以远程连过去。程序不能中断,客户要用,所以不能debug : 。单独安装一套系统来debug的话,由于环境不一样,不一定能发现问题,所以要是得 : 去诊断客户那套运行的系统,然后我脑子就不work了。我说检查代码,对方说小程序还 : 好,几十万行的代码你怎么检查。我问有没有log,对方反问我什么log。 : 反正我就晕菜了。 : : memory
|