- 浏览: 586217 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (365)
- Tomcat调优 (2)
- Apache Http (20)
- Webserver安装 (5)
- Linux安装 (28)
- Linux常用命令 (17)
- C语言及网络编程 (10)
- 文件系统 (0)
- Lucene (12)
- Hadoop (9)
- FastDFS (8)
- 报表 (0)
- 性能测试 (1)
- JAVA (18)
- CSharp (3)
- C++ (38)
- BI (0)
- 数据挖掘 (0)
- 数据采集 (0)
- 网址收集整理 (3)
- Resin (0)
- JBoss (0)
- nginx (0)
- 数据结构 (1)
- 随记 (5)
- Katta (1)
- Shell (6)
- webservice (0)
- JBPM (2)
- JQuery (6)
- Flex (41)
- SSH (0)
- javascript (7)
- php (13)
- 数据库 (6)
- 搜索引擎排序 (2)
- LVS (3)
- solr (2)
- windows (1)
- mysql (3)
- 营销软件 (1)
- tfs (1)
- memcache (5)
- 分布式搜索 (3)
- 关注的博客 (1)
- Android (2)
- clucene (11)
- 综合 (1)
- c c++ 多线程 (6)
- Linux (1)
- 注册码 (1)
- 文件类型转换 (3)
- Linux 与 asp.net (2)
- perl (5)
- coreseek (1)
- 阅读器 (2)
- SEO (1)
- 励志 (1)
- 在线性能测试工具 (1)
- yii (7)
- 服务器监控 (1)
- 广告 (1)
- 代理服务 (5)
- zookeeper (8)
- 广告联盟 (0)
- 常用软件下载 (1)
- 架设自已的站点心得 (0)
最新评论
-
terry07:
java 7 用这个就可以了 Desktop desktop ...
关于java Runtime.getRunTime.exec(String command)的使用 -
HSINKING:
怎么设置打开的dos 窗口是指定的路径下
关于java调用bat文件,不打开窗口 -
liubang201010:
hyperic hq更多参考资料,请访问:http://www ...
hyperic-hq -
^=^:
STDIN_FILENO是unistd.h中定义的一个numb ...
深入理解dup和dup2的用法 -
antor:
留个记号,学习了
[转]用java流方式判断文件类型
引用
用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/
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/
发表评论
-
Bash Socket 编程
2012-02-28 09:50 1959Bash Socket 编程 你可以在bash中开启一个s ... -
linux中shell变量$#,$@,$0,$1,$2,$!的含义解释
2012-02-20 10:46 1436请参看 http://tldp.org/LDP/a ... -
关于shell命令的定向输出 2>&1 .
2011-12-23 15:29 862分类: 脚本与批处理 20 ... -
利用ls查看当前目录文件数目
2011-08-16 10:23 1524查看当前目录下文件的个数 ls -l | grep “^-” ... -
linux:vi 替换命令
2011-08-10 15:49 9682008-01-02 11:35出处:linuxdiyf作者: ... -
Linux学习笔记之备份命令rsync
2011-06-12 19:56 1066Linux学习笔记之备份命令rsync 收藏 Linux学习 ... -
linux下让进程运行在指定的cpu上
2011-06-10 12:01 1331收藏 最近负责的svr压力比较大,业务逻辑有点复杂,能优化的 ... -
linux中系统性能分析命令top用法详解,总结
2011-06-10 11:42 2536: top命令是Linux系统下常用的性能分析工具,它能够实 ... -
常用命令
2011-05-30 21:29 7041、vi复制多行文本的方法 方法1: 光标放到第6行, ... -
UNIX 高手的 20 个习惯
2011-01-24 12:45 943UNIX 高手的 20 个习惯 收藏 此文于2011-01-1 ... -
Linux_系统管理_根据进程名kill进程 及常用命令
2011-01-11 13:34 24160、 引用如何kill掉进程名包含某个字符串的一批进程: ki ... -
rsync从linux到linux的文件同步备份
2010-12-31 10:07 1027引用http://os.51cto.com 2009 ... -
Linux:rsync服务器的快速搭建和使用
2010-12-31 09:32 725引用 Linux:rsync服务器的快速搭建和使用 rsync ... -
Linux下cron的使用
2010-12-31 09:24 803Linux下cron的使用 天极Blog (2005-06- ... -
linux学习日记实用技巧经验
2010-05-21 09:03 10561.更改telnet登录慢的问题: cd /etc v ... -
常用命令
2010-05-12 22:40 646改名命令 如 move A文件夹 B文件夹 结果 A文件夹 ...
相关推荐
在IT领域,Linux系统因其开源、稳定和高效的特点被广泛应用于服务器、云计算、嵌入式设备等场景。然而,任何操作系统都可能出现各种故障,Linux也不例外。对于Linux管理员来说,掌握系统故障诊断与排除技巧是必不可...
在Linux环境中,无论是服务器管理、桌面应用还是自动化脚本,都可能遇到各式各样的故障,从系统崩溃到服务中断,从权限问题到硬件故障,都需要具备一定的故障排查技巧来快速定位并解决问题。本教程将涵盖以下几个...
在实际使用中,配合"Linux故障排除宝典.exe"这个可能的电子版资源,你可以随时随地查阅,加深对每个知识点的理解。同时,不断实践和积累经验,是提升故障排除技能的关键。只有不断探索和学习,才能在面对复杂多变的...
12. **故障排除**:学习如何诊断和解决问题,如查看系统日志、使用strace跟踪系统调用,以及如何利用Google和其他在线资源。 13. **脚本编程**:基础的bash shell脚本编写,用于自动化日常任务,如使用for循环、...
最后,视频可能还会涉及系统监控和故障排查工具,如top、htop、iostat、vmstat和strace,这些都是运维人员日常工作中用来诊断性能问题和排除故障的利器。 总的来说,这四个视频课件构成了一套完整的Linux服务器配置...
11. **故障排除**:学习如何使用`dmesg`查看内核消息,`strace`跟踪系统调用,以及`grep`和`find`在日志文件中搜索错误信息,这些都是解决系统问题的关键技能。 12. **备份与恢复**:定期备份重要数据,并了解如何...
《Red Hat Linux 7服务器使用指南》是一本针对IT专业人士的详尽教程,旨在帮助读者掌握在Red Hat Linux 7操作系统环境下配置和管理服务器的基本技能和高级技术。Red Hat Linux 7是企业级Linux发行版的代表,因其稳定...
《Linux Server Hacks》这本书的标题和描述指向了一个关于Linux服务器技巧和工具的专业书籍,特别是关于连接、监控和故障排除的方面。从标题来看,这本书更侧重于教授读者一些高效、快捷的技巧(hacks),从而使得...
13. **故障排查**:了解如何通过`dmesg`、`strace`、`gdb`等工具进行问题定位和故障排除。 14. **自动化运维**:理解 Puppet、Ansible、Chef 等自动化运维工具,实现服务器配置的标准化和自动化。 15. **虚拟化...
10. **故障排除**:教授如何阅读和分析错误消息,使用strace、gdb等工具调试问题,以及如何解决常见的系统故障。 课件中的PPT-CentOSLinux01-02.rar至PPT-CentOSLinux14.rar分别代表了课程的不同章节,可能按照上述...
9. **故障排查**:学习如何使用各种诊断工具(如netstat、tcpdump、strace)进行问题定位,以及如何阅读和分析系统日志,对于快速解决服务器故障至关重要。 10. **云服务**:现代服务器架构常常涉及云服务,如...
8. 故障排除:学会使用`dmesg`、`journalctl`(对于systemd系统)查看系统消息,`strace` 跟踪系统调用。 "最新版Linux入门"教程将涵盖这些基础知识,让初学者逐步熟悉Linux环境,了解其核心概念,并能进行基本操作...
20. **系统调试与故障排除**:学会阅读和理解系统日志,使用`strace`、`gdb`等工具进行系统和应用的调试,是Linux系统管理员必备的技能。 这份"Linux参考大全"将深入探讨以上各点,帮助用户逐步成为Linux专家,无论...
14. **Linux调试与故障排除**:提供一些通用的故障排查方法,如查看错误日志、使用strace跟踪系统调用等。 通过学习这个"Linux入门"教程,新手可以建立起对Linux操作系统的全面认识,并具备基本的系统管理和问题...
在IT领域,Linux系统因其开源、稳定和高效的特点被广泛应用于服务器、嵌入式设备以及各种软件开发环境。然而,随着系统的复杂性增加,遇到问题时进行有效的调试变得至关重要。"Linux调试技术"是一个深入探讨如何在...
网络配置对于Linux服务器来说至关重要,需要掌握如何配置网络参数和监控网络状态。例如,`ifconfig`用于显示和修改网络接口的配置,而`route -n`查看当前路由表。`ping`命令用于测试网络连通性,而`netstat`命令可以...
以上只是Linux百科宝典中可能涉及的一部分内容,具体的学习资料可能还包括了实战案例、编程最佳实践、故障排除方法等。通过深入学习这些内容,你可以逐步成为一个熟练的Linux用户或开发者。在探索这个宝典的过程中,...
对此,需要进行详细的故障排除。 ### Linux系统服务与参数问题 1. **limits生效问题**:系统资源限制(limits)配置不当可能会影响服务或程序的正常运行,需要检查并调整。 2. **ss&netstat统计结果不一致**:两...
15. **故障排除**:学习如何通过日志分析、系统调用跟踪(strace、lsof等)来定位和解决问题。 总之,《Linux私房菜-基础学习篇》将带领读者逐步走进Linux的世界,从零开始学习这个强大的操作系统。通过深入学习和...
最后,掌握基本的故障排除技巧,如查看错误日志、使用调试工具(如`strace`、`gdb`)以及了解如何利用`dmesg`查看内核消息,都是成为Linux高手不可或缺的部分。 总的来说,"Linux实验与学习"这套资料提供了一个全面...