`
sealbird
  • 浏览: 583713 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用strace排除Linux服务器故障

阅读更多
引用
用strace排除Linux服务器故障  Linuxeden Q Q 群:165854196欢迎加入
strace是一个有用的小工具 – 大多数Linux系统默认已经安装 – 可以通过跟踪系统调用来让你知道一个程序在后台所做的事情。Strace是一个基础的调试工具;但是即便你不是在跟踪一个问题的时候它也是一个极好的软件。它能告诉你很多关于一个Linux程序怎样工作的信息。

一个系统调用就是一个从应用程序到内核的消息。现代计算机系统中的用户程序都是运行在一个沙箱里面:它们不允许直接与计算机交互(因此你不能像以前那样往寄存器里面塞一些数据来完成某些工作)。取而代之的是,每当程序需要与系统交互的时候,他就发送一个请求(系统调用)到内核。Strace就是用来跟踪这些消息的。因此请记住,如果你有一会儿看不到任何strace的输出,这也并不代表你的程序发生了阻塞。很有可能是程序在自己的沙箱里面做某些事情,而这些事情并不需要与系统的其它部分发生通信。

用法


Strace程序固然能做这些事情,但它总是直接将所有的东西输出到标准错误文件(也就是屏幕)。就像你将看到的那样,它会产生大量的输出;因此通常来说你最好用-o选项来设置一个输出文件:


strace -o outputfile.txt program

有一些编辑器(如vim)能够对strace的输出进行语法高亮显示。这意味着文件的不同部分,以及每一行的不同部分都会用不同的颜色来显示。这个功能相当有用,我强烈建议你使用一个这样的编辑器来查看strace的输出。


命令输出解释


试一试strace -o strace.out ls –l,然后用你喜欢的编辑器打开strace.out,并且启用语法高亮。


在深入探索细节之前,先来看看每一行的基本结构。Strace记录了程序所发出的每一次系统调用,并且各自显示在单独的一行中。系统调用的名字出现在每一行的起始,参数出现在括号里面,返回值则在等号后面,是一行的终结。命令ls –l的头几行输出基本上是如下这个样子:


execve("/bin/ls", ["ls", "-l"], [/* 21 vars */])      = 0
brk(0)                                                = 0x619000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b412f2b9000
uname({sys="Linux", node="juliet.example.com", ...})  = 0

第一行显示的是一个execve的系统调用,其参数如下:
当前可执行程序的位置 (/bin/ls)
一个从命令行传递过来的参数数组 (ls与-l)
一个指向21个环境变量的指针,也是传递给该程序的。
返回值为0,表示执行成功。这就是所有系统调用都相同的基本结构。

所有在后台的内幕

接下来的几行跟内存管理有关。Brk改变数据段的大小,而mmap用来返回一个进程可用的内存位置。(如需要更多信息,请尝试man 2 mmap。)


再下面一行是uname系统调用,用来显示系统的详细信息。Uname所返回的是一个指针,它指向存储这些信息的一个数据结构。系统调用经常会返回指针:这是一个内存引用,告诉你到哪里去寻找这些信息。如果你是一台计算机,这非常有用,但如果你是一个人就未必了;因此为了方便起见,每当__strace__看到一个指针的时候,它就自动帮你进行查找,然后返回(一部分)指针指向的内容。这正是上面在uname系统调用那里所发生的事情。


如果你继续查看strace的输出,你就会看到很多access和open的调用。Access查找一个文件(如果没找到就返回-1和一个错误码),然后检查当前程序是否有访问权限。Open试图打开一个文件,如果成功的话就会将其连接到一个文件句柄(从3开始,因为0-2被用于STDIN、STDOUT和STDERR)并返回这个句柄。然后,fstat会获取连接到该句柄的文件的有关信息,句柄通过第一个参数传递而来,就像这样(注意第二个参数是一个指针!):


fstat(3, {st_mode=S_IFREG|0644, st_size=53482, ...}) = 0

在另一个mmap调用以后,文件将会被关闭。在ls的输出中,你会看到这个序列在库文件上面重复许多遍。而在那以后,对于每一个列出的文件还有lstat、lgetxattr和getxattr等调用。这都是对每个文件获取信息用的。最后,每个文件都会按这种方式写到输出文件:

stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3661, ...}) = 0
write(1, "-rw-------  1 juliet juliet    10"..., 72) = 72

编号为1和2的文件句柄 (STDOUT和STDERR)将会关闭,于是一切都完成了。


结论


这只是一个关于阅读strace输出的非常快速的介绍。要深入理解的话,最好的建议是去查看每个系统调用的手册页(man 2 <系统调用名>),并且尝试着在各种程序中使用strace跟踪输出。在各种语言的‘Hello, World’程序上使用strace是一件非常有趣的事情。你还可以检查某个已经在运行的程序,然后用strace的-p PID选项来实时连接到其中的某一个。祝你在使用strace深入解剖你的程序时其乐无穷!


来源:http://www.linuxplanet.com/linuxplanet/tutorials/7229/1/
分享到:
评论

相关推荐

    Linux系统故障诊断与排除

    在IT领域,Linux系统因其开源、稳定和高效的特点被广泛应用于服务器、云计算、嵌入式设备等场景。然而,任何操作系统都可能出现各种故障,Linux也不例外。对于Linux管理员来说,掌握系统故障诊断与排除技巧是必不可...

    Linux故障排除宝典教程.rar

    在Linux环境中,无论是服务器管理、桌面应用还是自动化脚本,都可能遇到各式各样的故障,从系统崩溃到服务中断,从权限问题到硬件故障,都需要具备一定的故障排查技巧来快速定位并解决问题。本教程将涵盖以下几个...

    Linux故障排除宝典

    在实际使用中,配合"Linux故障排除宝典.exe"这个可能的电子版资源,你可以随时随地查阅,加深对每个知识点的理解。同时,不断实践和积累经验,是提升故障排除技能的关键。只有不断探索和学习,才能在面对复杂多变的...

    Linux服务器管理员教程

    12. **故障排除**:学习如何诊断和解决问题,如查看系统日志、使用strace跟踪系统调用,以及如何利用Google和其他在线资源。 13. **脚本编程**:基础的bash shell脚本编写,用于自动化日常任务,如使用for循环、...

    软考网络工程师视频课件(二):linux服务器配置

    最后,视频可能还会涉及系统监控和故障排查工具,如top、htop、iostat、vmstat和strace,这些都是运维人员日常工作中用来诊断性能问题和排除故障的利器。 总的来说,这四个视频课件构成了一套完整的Linux服务器配置...

    Linux服务器搭建-论文.docx

    11. **故障排除**:学习如何使用`dmesg`查看内核消息,`strace`跟踪系统调用,以及`grep`和`find`在日志文件中搜索错误信息,这些都是解决系统问题的关键技能。 12. **备份与恢复**:定期备份重要数据,并了解如何...

    Red Hat Linux 7服务器使用指南

    《Red Hat Linux 7服务器使用指南》是一本针对IT专业人士的详尽教程,旨在帮助读者掌握在Red Hat Linux 7操作系统环境下配置和管理服务器的基本技能和高级技术。Red Hat Linux 7是企业级Linux发行版的代表,因其稳定...

    Linux Server Hacks

    《Linux Server Hacks》这本书的标题和描述指向了一个关于Linux服务器技巧和工具的专业书籍,特别是关于连接、监控和故障排除的方面。从标题来看,这本书更侧重于教授读者一些高效、快捷的技巧(hacks),从而使得...

    Linux课件关于服务器方面

    13. **故障排查**:了解如何通过`dmesg`、`strace`、`gdb`等工具进行问题定位和故障排除。 14. **自动化运维**:理解 Puppet、Ansible、Chef 等自动化运维工具,实现服务器配置的标准化和自动化。 15. **虚拟化...

    CentOS Linux系统管理与运维-课件.rar

    10. **故障排除**:教授如何阅读和分析错误消息,使用strace、gdb等工具调试问题,以及如何解决常见的系统故障。 课件中的PPT-CentOSLinux01-02.rar至PPT-CentOSLinux14.rar分别代表了课程的不同章节,可能按照上述...

    《菜鸟学架服务器》

    9. **故障排查**:学习如何使用各种诊断工具(如netstat、tcpdump、strace)进行问题定位,以及如何阅读和分析系统日志,对于快速解决服务器故障至关重要。 10. **云服务**:现代服务器架构常常涉及云服务,如...

    最新版linux入门

    8. 故障排除:学会使用`dmesg`、`journalctl`(对于systemd系统)查看系统消息,`strace` 跟踪系统调用。 "最新版Linux入门"教程将涵盖这些基础知识,让初学者逐步熟悉Linux环境,了解其核心概念,并能进行基本操作...

    Linux 参考大全

    20. **系统调试与故障排除**:学会阅读和理解系统日志,使用`strace`、`gdb`等工具进行系统和应用的调试,是Linux系统管理员必备的技能。 这份"Linux参考大全"将深入探讨以上各点,帮助用户逐步成为Linux专家,无论...

    Linux入门

    14. **Linux调试与故障排除**:提供一些通用的故障排查方法,如查看错误日志、使用strace跟踪系统调用等。 通过学习这个"Linux入门"教程,新手可以建立起对Linux操作系统的全面认识,并具备基本的系统管理和问题...

    Linux调试技术

    在IT领域,Linux系统因其开源、稳定和高效的特点被广泛应用于服务器、嵌入式设备以及各种软件开发环境。然而,随着系统的复杂性增加,遇到问题时进行有效的调试变得至关重要。"Linux调试技术"是一个深入探讨如何在...

    Linux实战工程师笔记

    网络配置对于Linux服务器来说至关重要,需要掌握如何配置网络参数和监控网络状态。例如,`ifconfig`用于显示和修改网络接口的配置,而`route -n`查看当前路由表。`ping`命令用于测试网络连通性,而`netstat`命令可以...

    Linux百科宝典.rar

    以上只是Linux百科宝典中可能涉及的一部分内容,具体的学习资料可能还包括了实战案例、编程最佳实践、故障排除方法等。通过深入学习这些内容,你可以逐步成为一个熟练的Linux用户或开发者。在探索这个宝典的过程中,...

    超经典运维指南之Linux系统诊断.pdf

    对此,需要进行详细的故障排除。 ### Linux系统服务与参数问题 1. **limits生效问题**:系统资源限制(limits)配置不当可能会影响服务或程序的正常运行,需要检查并调整。 2. **ss&netstat统计结果不一致**:两...

    Linux私房菜-基础学习篇

    15. **故障排除**:学习如何通过日志分析、系统调用跟踪(strace、lsof等)来定位和解决问题。 总之,《Linux私房菜-基础学习篇》将带领读者逐步走进Linux的世界,从零开始学习这个强大的操作系统。通过深入学习和...

    linux实验与学习

    最后,掌握基本的故障排除技巧,如查看错误日志、使用调试工具(如`strace`、`gdb`)以及了解如何利用`dmesg`查看内核消息,都是成为Linux高手不可或缺的部分。 总的来说,"Linux实验与学习"这套资料提供了一个全面...

Global site tag (gtag.js) - Google Analytics