一种集群文件系统中客户端进程信息的诊断方法_2

文档序号:9887491阅读:来源:国知局
,使程序运行到此处后停住。
[0041 ]并且,调试时,可以指定一个观察点,来使程序运行到此处停下,一般情况下,可以以命令watch expr来设置一个观察点,watch expr是表达式或变量,当表达式的值变化时,就会立即停住程序。通过命令info locals打印出当前函数中所有局部变量及其值,调试代码的过程中,以命令r args运行程序,r args指定参数也可忽略,可以通过命令η单步跟踪程序的运行,通过命令s进入函数体内,来观察函数的调用和执行情况。程序运行时,通过命令P来打印变量、字符串、表达式,即当前运行程序中的cons t常量、变量、函数的值,来了解运行的参数信息。程序运行过程中可以动态修改程序运行时的命令set的数值或命令print的数值。程序停住时,首先需要查看程序是在什么地方停住的,当程序调用一个函数,函数的地址,函数参数,函数内的局部变量都会被压入栈中,即压入堆栈中,通过命令bt打印当前的函数调用栈的所有信息。逐步调试定位进程的问题所在,从而进行解决。如此可以快速定位客户端进程信息问题,能够保证集群文件的安全性,减少了文件丢失的可能性。
[0042]集群文件系统为用户提供了高性能和高可用的服务,为了使用户能够更好的使用集群文件系统,要保证集群状态的正常和客户端出现故障时及时诊断问题并进行修复,才能更好的使集群对外提供服务。本发明提出的的集群文件系统中客户端进程信息的诊断方法实现当客户端进程遇到故障时,进行进程的诊断来定位问题的所在,相对于传统的重启客户端进程或者是进行集群的重启的方法,避免了数据的丢失,保证了集群的数据安全。本发明的硬件环境是在集群环境中,因此在集群搭建完成后,想正常使用集群时,要在客户端进行操做,包括挂载集群的文件系统,和向集群读写文件等操作,当操作遇到故障,不能很好的利用集群为其提供服务时,可以采用调试工具,进行进程的调试和诊断,定位解决问题,保证数据的安全性。考虑到集群的特殊性,通过本发明的方法来解决一些如集群不能正常挂载,或者无法正常进行一些文件操作的问题。
[0043]在具体实施过程中,以调试客户端向集群文件系统写入数据为例,首先要找到对应的进程号,根据进程号,调试进程,在程序的指定函数处加上断点,这里以函数fuse_ll_write为例,在函数fuse_ll_write处加上断点后,函数运行,执行到此断点后,继续执行程序,然后另建一个窗口,在调试工具上运行命令dd,向文件目录下执行写文件命令,SPdd if= /dev/zero of = /mnt/ceph/test bs = lM count = I,程序运行到断点处,查看函数fuse_ll_write的参数信息,是否与所写的文件参数信息一致。也可以执行命令info locals查看打印出当前函数中所有局部变量及其值。继续运行观察进程是否产生新的线程来执行调试所执行的写文件操作,查看文件目录下是否有所写的文件,如果文件目录下有所写的文件,且文件大小与向文件目录下所写的文件大小一致,则说明能够正常下文件目录下执行写操作,则进程正常。
[0044]其中,利用调试工具显示进程号的指令如下:
[0045][rootOServer?]#ps -ef | grep gdb
[0046]root 1375 1325 O 05:12 pts/0 00:00:02 gdb -p 1347
[0047]在调试工具指定函数处加断点的指令如下:
[0048](gdb)b fuse_ll_write
[0049]Breakpoint I at 0x541310:file client/fuse_ll.cc, line 972
[0050]在调试工具上打印当前函数中所有局部变量及其值的指令如下:
[0051](gdb)info args
[0052]req = 0x7f5264009e60
[0053]ino = 1099511627788
[0054]buf = 0x7f528058e060""
[0055]size = 131072
[0056]off = 131072
[0057]fi = 0x7f52561fbc30
[0058]在调试工具上进入函数和显示堆栈信息的指令如下:
[0059](gdb)bt
[0060]#0 f use_l l_wr ite(req = 0x7f526400a210, ino = 1099511627788, buf =0x7f528058e060////,size=131072,off = 262144,fi = 0x7f52561fbc30)at client/fuse_11.cc:973
[0061]#1 0x00007f52802d09d5 in??()from/usr/1ib64/libfuse.s0.2
[0062]#2 0x00007f52802dl445 in??()from/usr/1ib64/libfuse.s0.2
[0063]#3 0x00007f52802cc6ba in??()from/usr/lib64/libfuse.s0.2
[0064]#4 0x00007f527fc899dl in start_thread()from/lib64/libpthread.s0.0
[0065]#5 0x00007f527e902b6d in clone()from/lib64/libc.s0.6
[0066]综上所述,本发明所提供的一种集群文件系统中客户端进程信息的诊断方法,利用调试工具调试当前的客户进程,查看当前的客户端进程的程序;在程序运行时,在调试工具上打印程序运行过程中所有的参数信息,查看参数信息;当程序停止时,通过打印出来的参数信息来确定程序停止的位置。可见,利用调试工具调试当前的客户进程,并能查看所有的参数信息,当出现客户端挂载不上集群或者集群状态信息不正常的情况,不再需要重启客户端进程或者进行集群的重启来修复异常,直接利用调试工具就能确定程序停止的位置,即出现异常的问题所在的地方,避免重启过程造成数据的丢失,所以该方法实现快速定位客户端进程信息问题,保证集群文件的安全性,避免数据的丢失。
[0067]以上对本发明所提供的一种集群文件系统中客户端进程信息的诊断方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
【主权项】
1.一种集群文件系统中客户端进程信息的诊断方法,其特征在于,包括: 利用调试工具调试当前的客户进程,查看当前的客户端进程的程序; 在所述程序运行时,在所述调试工具上打印所述程序运行过程中所有的参数信息,查看所述参数信息; 当所述程序停止时,通过打印出来的参数信息来确定所述程序停止的位置。2.如权利要求1所述的方法,其特征在于,还包括: 若所述程序为服务程序,设置所述程序运行时的进程地址ID,通过所述调试工具连接入所述进程地址ID。3.如权利要求1所述的方法,其特征在于,所述参数信息包括变量、字符串和表达式。4.如权利要求1所述的方法,其特征在于,所述在所述调试工具上查看当前的客户端进程的程序,包括: 通过ps-a命令查看当前的进程信息,所述进程信息为当前客户端进程的程序。5.如权利要求1所述的方法,其特征在于,还包括: 通过所述调整工具修改所述程序中的运行参数,查看修改后的所述程序的运行状态。6.如权利要求5所述的方法,其特征在于,所述运行参数包括所述程序当前运行的函数中的局部变量及局部变量的数值。7.如权利要求1所述的方法,其特征在于,还包括: 通过所述调试工具在所述程序中选定一个函数,在选定的函数的位置上设置断点,使客户端进程运行到所述断点时停住。8.如权利要求1至7中任意一项所述的方法,其特征在于,还包括: 当所述程序调用一个函数时,被调用的函数的地址、参数和局部变量均被压入堆栈中,在所述调试工具上打印所述堆栈中的所有信息。
【专利摘要】本发明公开了一种集群文件系统中客户端进程信息的诊断方法,该方法包括:利用调试工具调试当前的客户进程,查看当前的客户端进程的程序;在所述程序运行时,在所述调试工具上打印所述程序运行过程中所有的参数信息,查看所述参数信息;当所述程序停止时,通过打印出来的参数信息来确定所述程序停止的位置。该方法实现快速定位客户端进程信息问题,保证集群文件的安全性,避免数据的丢失。
【IPC分类】G06F11/07
【公开号】CN105653388
【申请号】
【发明人】喻胜银
【申请人】浪潮(北京)电子信息产业有限公司
【公开日】2016年6月8日
【申请日】2016年1月29日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1