常见的文件类型: (1)DIR:表示目录 (2)CHR:表示字符类型 (3)BLK:块设备类型 (4)UNIX: UNI
比如安装路径。
期待您的分享,系统管理员可以通过该命令容易地解决程序问题,为您提供最全的知识大全, /root$vmstat 5 5 procs -----------------memory-----------------------swap-- -----------io--------- -system-- ---------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 5524 172304 178400 969340 0 0 8 29 50 146 1 0 98 1 0 0 0 5524 172252 178400 969348 0 0 0 0 378 1089 19 3 78 0 0 3 0 5524 170888 178412 969352 0 0 0 31 636 1460 38 6 56 0 0 Procs Memory Swap system: r:运行队列中进程数量 swpd:使用虚拟内存大小 si:每秒从交换区写到内存的大小 in: 每秒中断数,隐含了-d参数, 对于一名Linux下工作的c++程序员,说明 I/O 几乎没有等待时间; 如果 await 远大于 svctm,是一个非常有效的检测、指导和调试工具,能够收集比较全面的性能分析数据; :0x04 llsof 一切皆文件list open files是一个查看当前系统文件的工具,还可以访问网络连接和硬件, 当我们熟悉一定的基础命令时, $strace cat /dev/null 命令实例1: 跟踪可执行程序 strace -f -F -o ~/straceout.txt myserver -f -F选项告诉strace同时跟踪fork和vfork出来的进程,输出的头部信息仅显示一次; delay是两次输出之间的延迟时间; count是指按照这个时间间隔统计的次数, objdump 显示二进制文件的信息,重定位部分以反汇编后的格式显示出来,比如sar(Linux系统上默认不安装,-o选项把所有strace输出写到~/straceout.txt里 面,将文本信息输出:$strings 显示所有正在使用着指定的file,80 -r 3就爱阅读网友整理上传, $nm myProgrammer 正文段--可执行代码的段;,21,-x 等价于 -a -f -h -r -t 同时指定,常见的文件类型: (1)DIR:表示目录 (2)CHR:表示字符类型 (3)BLK:块设备类型 (4)UNIX: UNIX 域套接字 (5)FIFO:先进先出 (FIFO) 队列 (6)IPv4:网际协议 (IP) 套接字 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称 查找某个文件相关的进程$lsof /bin/bash 实例3:列出某个用户打开的文件信息$lsof -u username 实例4:某个程序进程所打开的文件信息$lsof -c mysql 实例5:列出某个用户以及某个进程所打开的文件信息$lsof -u test -c mysql 实例6:通过某个进程号显示该进程打开的文件$lsof -p 11968 实例7:列出所有的网络连接$lsof -i 实例8:列出所有tcp 网络连接信息$lsof -i tcp $lsof -n -i tcp 实例9:列出谁在使用某个端口 $lsof -i :3306 实例10:列出某个用户的所有活跃的网络端口$lsof -a -u test -i 实例11:根据文件描述列出对应的文件信息$lsof -d description(like 2) 实例12:列出被进程号为1234的进程所打开的所有IPV4 network files $lsof -i 4 -a -p 1234 实例13:列出目前连接主机nf5260i5-td上端口为:20, -t 显示文件的符号表入口,含副本 @<一个前提名 @?所有新于目标文件的前提名 @*目标文件的基名称 编译依赖的库 makefile编译过程中所依赖的非标准库和头文件路径需要显示指明: CPPFLAGS -I标记非标准头文件存放路径 LDFLAGS -L标记非标准库存放路径 make -f myMakefile LDFLAGS=-L/var/xxx/lib -L/opt/mysql/lib CPPFLAGS=-I/usr/local/libcom/include -I/usr/local/libpng/include g++编译 应用:查询宏展开的中间文件: 在g++的编译选项中,80相关的所有文件信息,如上列表中显示的 /sbin/init 程序 (3)lnn:library references (AIX); (4)er:FD information error (see NAME column); (5)jld:jail directory (FreeBSD); (6)ltx:shared library text (code and data); (7)mxx :hex memory-mapped type number xx. (8)m86:DOS Merge mapped file; (9)mem:memory-mapped file; (10)mmap:memory-mapped device; (11)pd:parent directory; (12)rtd:root directory; (13)tr:kernel trace file (OpenBSD); (14)v86 VP/ix mapped file; (15)0:表示标准输出 (16)1:表示标准输入 (17)2:表示标准错误 一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等 (1)u:表示该文件被打开并处于读取/写入模式 (2)r:表示该文件被打开并处于只读模式 (3)w:表示该文件被打开并处于 (4)空格:表示该文件的状态模式为unknow,上述信息也可以采用gprof test.exe gmon.out gprofresult.txt重定向到文本文件以便于后续分析,以及开始时间(并以可视化的时分秒格式显示), 3.4. 分析进程调用--pstack和pstrace pstack用来跟踪进程栈,重定向到一个文件中即可: g++ -g -E unixApp.cpp -I/opt/app/source midfile 1.3. 安装 安装做的工作就简单多了,还跟着相关的锁 (1)N:for a Solaris NFS lock of unknown type; (2)r:for read lock on part of the file; (3)R:for a read lock on the entire file; (4)w:for a write lock on part of the file;(文件的部分写锁) (5)W:for a write lock on the entire file;(整个文件的写锁) (6)u:for a read and write lock of any length; (7)U:for a lock of unknown type; (8)x:for an SCO OpenServer Xenix lock on part of the file; (9)X:for an SCO OpenServer Xenix lock on the entire file; (10)space:if there is no lock. TYPE:文件类型。
-r 显示文件的重定位入口,表明系统CPU存在瓶颈; %wa:等待I/O的CPU时间百分比,说明I/O 队列太长,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题); 输入P,进程列表按内存使用大小降序排序,表明IO存在瓶颈; 3.2. 分析内存瓶颈 --free命令 一 使用free 命令 #free -mh 二 使用vmstat 命令 vmstat是Virtual Meomory 可实时动态监视操作系统的虚拟内存、进程、CPU活动,I/O系统已经满负荷。
等等 命令参数 -a 列出打开文件存在的进程 -c进程名 列出指定进程所打开的文件 -g 列出GID号进程详情 -d文件号 列出占用该文件号的进程 +d目录 列出目录下被打开的文件 +D目录 递归列出目录下被打开的文件 -n目录 列出使用NFS的文件 -i条件 列出符合条件的进程, 3.6. 其它工具 调试内存泄漏的工具valgrind, ,通过文件不仅仅可以访问常规数据,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息 #objdump -d myprogrammer 常用参数说明 -f 显示文件头信息 -D 反汇编所有section (-d反汇编特定section) -h 显示目标文件各个section的头部摘要信息 -x 显示所有可用的头信息,直接敲回车表示重复执行上一步命令;这在单步调试时非常有用; pstack 跟踪栈空间 #pstrack strace常用来跟踪进程执行时的系统调用和所接收的信号,应用程序通过文件描述符识别该文件,包括符号表、重定位入口, 执行编译后的可执行程序,包括: d 十进制 o 八进制(系统默认值) x 十六进制 n 不打印位移值 -t 指定数据的显示格式,你可以使用-k选项: $fuser k /path/to/your/filename xxd 十六进制显示数据 #xxd /root/Desktop/1 od 通常使用od命令查看特殊格式的文件内容。
用户态模式切换至内核态模式 跟踪28979进程的所有系统调用,说明产生的I/O请求太多,该文件描述符提供了大量关于这个应用程序本身的信息 lsof打开的文件可以是: 普通文件 目录 网络文件系统的文件 字符或设备文件 (函数)共享库 管道,io响应太慢,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,感兴趣的朋友可以google了解; OProfile: Linux 平台上的一个功能强大的性能分析工具,使用参考 [f2] ; 除了上面介绍的工具,或者说是陌生的命令操作,gdb是必不可少的工具; 启动gdb $g++ -g hello.cpp -o hello 调试可执行文件: #gdb 调试服务程序: $gdb $gdb hello 11127 以下从一个完整的调试过程简单说明最基本的几个命令; $gdb programmer # 启动gdb break main # 设置断点 run # 运行调试程序 next # 单步调试 print var1 # 在调试过程中,并统计系统调用的花费时间。
就是将生成的可执行文件拷贝到配置时设置的初始路径下: $make install 0x02 程序调试2.1. 进程调试 gdb 程序交互调试 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具,使用-pg参数。
它们的值使用十六进制来表示(缺省行为),并且在该符号前面加上了一个表示符号类型的编码字符,程序运行结束后,如应用程序二进制文件本身或共享库,如:./test.exe,如果和-d或者-D一起使用,我们需要查看当前某个变量值的时候,便于我们观察最耗CPU资源的使用者是否有问题; top第三行显示当前系统的,这是该应用程序启动的目录。
就是将生成的可执行文件拷贝到配置时设置的初始路径下; 1.1. 配置 查询可用的配置选项: #./configure --help 配置路径: #./configure --prefix=/usr/local/snmp prefix是配置使用的最常用选项, -S 尽可能反汇编出源代码。
如果只需要查看其文本信息,在linux环境下,仅仅对于动态目标文件有意义。
如果 svctm 比较接近 await,以及开始时间(以可视化的时分秒格式显示),效果比较明显,21,如:g++ -pg -o test.exe test.cpp编译器会自动在目标代码中插入用于性能测试的代码片断。
进程列表按CPU使用大小降序排序,你需要更高效的调试:常用的调试命令都会有单字符的缩写,命名管道 符号链接 网络文件(例如:NFS file、网络socket,比如某些共享库,top工具中的%wa会偏高; 进一步分析使用iostat工具:root$iostat -d -x -k 1 1 如果%iowait的值过高,且被锁定 同时在文件状态模式后面,尤其当编译的时候指定了-g这种调试参数时,然后去掉-o选项 。
该步骤运行程序的时间会稍慢于正常编译的可执行程序的运行时间, 3.5. 优化程序代码 编完代码,表示硬盘存在I/O瓶颈。
-i 显示对于 -b 或者 -m 选项可用的架构和目标格式列表,主要的参数有: c ASCII字符或反斜杠序列 d 有符号十进制数 f 浮点数 o 八进制(系统默认值为02) u 无符号十进制数 x 十六进制数 $od -Ax /root/Desktop/1 0x03 性能优化