一、Linux常用命令1top介绍:top命令是Linux下常用的性能分析工具。它可以实时显示系统中各个进程的资源使用情况,类似于Windows的任务管理器。top用法格式:top[-][d][p][q][c][C][S][s][n]d指定每两次屏幕刷新之间的时间间隔。当然,用户可以使用s交互命令来改变它。p通过指定监控进程ID,只监控一个进程的状态。q此选项将使顶部刷新没有任何延迟。如果调用程序具有超级用户权限,那么top将以尽可能高的优先级运行。S指定累加模式。s使top命令以安全模式运行。这消除了交互式命令带来的潜在危险。i使top不显示任何空闲或死进程。c显示整个命令行,而不仅仅是命令名称。top的常用参数,top是一个交互命令,下面的参数经常用到,在top界面输入下面的字母:f或F可以在当前显示中增加或删除项目。o或O更改显示项目的顺序。l切换显示平均负载和启动时间信息。m切换内存信息的显示。t切换显示进程和CPU状态信息。c切换显示命令名称和完整命令行。M按常驻内存大小排序。P按照CPU使用率百分比排序。输出参数介绍:totaltotaltotalprocessesrunningrunningnumberofprocessessleepingnumbersleepingprocessesstoppednumberofstoppedprocesseszombienumberofzombieprocessesCpu(s):12.5%us用户空间占用的CPU百分比8.4%syCPU百分比内核空间占用0.0%ni用户进程空间中优先级发生变化的进程占用的CPU百分比74.67%id空闲CPU百分比1.4%wa等待输入输出的CPU时间百分比0.0%hi:硬件CPU中断百分比3.1%si:软中断百分比0.0%st:虚拟机占用百分比按1切换进程查看单个cpu详情Mode2mpstat介绍:mpstat(多处理器统计),可以检测多处理器上每个CPU的使用情况-实时处理器系统。格式:mpstat[-P{0|1|...|ALL}][interval][count]常用命令示例:mpstat-PALL1100输出:一般我们最关心的是:%usr系统运行在用户上的空间时间占CPU总运行时间的比例。%sys在内核空间中运行的所有进程占系统总CPU时间的比率。%idle系统空闲时间占CPU总运行时间的比例。%iowaitCPU等待磁盘IO处理的时间占CPU总运行时间的比例。3free命令格式:free-m从/proc/meminfo文件中读取的数据123456缓存的总使用空闲共享缓冲区1Mem:15793147001093032379222-/+缓冲区/缓存:645493393Swap:2039200930第一行输出来自操作系统(OS)。也就是说,从OS来看,总共有:15793MB(free默认单位是KB)物理内存,即F1;14700MB(即F1)用于这些物理内存;1093(即F1)可用;缓冲区是尚未“写入”磁盘的东西。缓存是从磁盘“读取”并存储以备后用的东西。也就是说,缓冲区是用来存放要输出到磁盘(块设备)的数据的,缓存是用来存放从磁盘读取的数据的。这两个都是为了提高IO性能,由OS管理。F2=F1-F1-F1F2=F1+F1+F14vmstat简介:vmstat(虚拟内存统计),实时输出系统资源使用情况,如进程信息、CPU使用情况、内存使用情况和I/O使用情况等.Situation[]#vmstat54procs———–memory—————swap–—–io——–system–—–cpu—–rbswpdfreebuffcachesisobiboincsussyidwast002056748283348400532876110400517000106831010102056748173896400540876183600000048376313126313112604141275000010102055674817267481760024800248760248887604887604887604887604048876040488760488760488760488760488760488724887960488760488796048879604888960292MON1020567481788844005568762576000234767731094241197900注意第一行是系统启动以来的平均结果,后面输出的采样周期的平均结果。输出字段含义解释如下:Procs:进程信息,r表示运行队列中的进程数(即实际分配给CPU的进程数),b表示不可中断休眠进程数,阻塞进程。Memory:内存信息,swpd表示使用的虚拟内存量,单位是KB。Swap:交换分区(虚拟内存)的使用信息,单位为KB/s,si表示数据从磁盘交换到内存的速率,so表示数据从内存交换到磁盘的速率。如果这两个值经常变化,说明内存不足。io:块设备的使用信息,单位为blocks/s,bi表示块从块设备中读取的速率,bo表示块写入块设备的速率。system:系统信息,in表示每秒发生的中断次数,cs表示每秒发生的上下文切换(进程切换)次数。CPU:CPU的使用信息。这四个参数见介绍。5iostat简介:iostat主要用于监控系统设备的IO负载。自上次运行命令以来的统计信息。命令:参数很多,这里只介绍几个我常用的参数iostat[-d][-kx][interval][count]-d输出磁盘详细信息-kunitk-x输出所有详细信息#iostat-kx1100Linux2.6.32.43-tlinux-1.0.17-default(V_*...*)07/16/17x86_64(8CPU)avg-cpu:%user%nice%system%iowait%steal%空闲1.860.001.600.070.0096.46DEVICE:RRQM/SWRQM/SR/SR/SW/SRKB/SWKB/SAVGRQ-SZavgrq-szavgququ-sz等待svctm%svctm%将统计时间内所有处理IO的时间除以总统计时间。例如统计间隔为1秒,设备处理IO时间为0.8秒,空闲时间为0.2秒,则设备的%util=0.8/1=80%,所以这个参数暗示了设备有多忙.一般情况下,如果该参数为100%,则表示设备接近满负荷运行。6df简介:df命令用于显示磁盘分区上的可用磁盘空间。默认显示单位为KB。命令:df输出:Filesystem1K-blocksUsedAvailableUse%Mountedon/dev/sda1103212085368524442839655%//dev/sda3206424289695556989829650%/usr/local/dev/sda492841285674205630013919584485%/datatmpfs4025928040259280%/dev/shm增加按目录大小排序命令:du-h--max-depth=1|sort-hr7lsof介绍:lsof(listopenfile),列出当前系统打开的文件描述符.使用此命令检查进程打开了哪些文件描述符。常用于检查是否存在文件句柄泄漏。格式:lsof常用参数:lsof-ppid//查看进程pid的所有句柄lsof-i//显示所有打开的端口lsof-i:80//显示所有打开80端口的进程8Netstat简介:Netstat命令用于显示各种网络相关信息,如网络连接、路由表等。参数说明:-a(all)显示所有选项,默认不显示LISTEN相关选项-t(tcp)只显示tcp相关选项-u(udp)只显示udp相关选项-n拒绝显示别名,可以显示所有转换后的号码Number-l只列出Listen(监听)中的服务状态-p显示建立相关链接的程序名-r显示路由信息,路由表-e显示扩展信息,如uid等-s根据每个协议进行统计-c定时执行netstat命令提示:LISTEN和LISTENING的状态只能用-a或-l查看使用示例:netstat-a列出所有端口netstat-at列出所有tcpportsnetstat-aulistsAlludpportsnetstat-l只显示监听端口netstat-p显示进程名查看hlwmp信息:9sar介绍:sar(SystemActivityReporter系统活动报告)是最全面的系统性能分析工具之一目前Linux上的工具。以多种方式报告系统活动,包括:文件读写、系统调用使用情况、磁盘I/O、CPU效率、内存使用情况、进程活动和IPC相关活动。查看网卡流量命令:sar-nDEV2100输出:10tcpdump简介:tcpdump可以完全截取网络中传输的数据包的“包头”进行分析。支持针对网络层、协议、主机、网络或端口的过滤,提供and、or、not等逻辑语句,帮助您去除无用信息。参数说明:-i指定tcpdump需要监控的接口。任意网口any,指定网口lo或eth0等-s指定抓包长度为0,表示抓取整个包。如果未设置,默认值为68字节-w将数据包数据直接写入文件而不解析和打印输出-x以十六进制显示输出-n不要将地址(例如,主机地址、端口号)从数字转换为名称。还有很多选项,这里就不一一列举了。您可以查看帮助文档以了解常见的条件语句。不一一罗列,可以查看信息:hostsrchostdsthostPortandornottcpUdp常用命令示例:sudo/usr/sbin/tcpdump-ieth1-s0srchost10.120.100.33andport26941-w/tmp/captuer.cap11strace简介:strace跟踪程序运行过程中接收到的系统调用信号,记录系统调用名称、参数、返回值,将信息和耗时输出到标准输出或指定file命令参数说明:-c统计每次系统调用的执行时间、执行次数和错误次数-f跟踪fork调用产生的子进程-t在每行输出前加上时间信息-etrace=setonlytrace指定的系统调用,如-etrace=open、close、read等-etrace=fileonlytrace文件操作相关的系统调用-etrace=networkonlytracenetwork相关的系统调用-o将结果输出到file-ppid指定进程12pstack介绍:pstack用于查看进程的堆栈快照命令:pstackpid输出:pstackpid,输出进程各个线程的堆栈13perftop-ppid介绍:perf是Linux内核自带的系统性能优化工具。perf可以用来查看热点函数,帮助开发者优化程序性能。命令:perftop-ppid查看某个进程的功能热点输出:2.GDB使用介绍1查看core文件配置core文件大小,ulimit-cunlimited查看/home/user_00/services/spp_hlwcdkey下生成的coredump文件/bingdb./spp_hlwcdkey_worker/data/coredump/core_xxxx2使用GDBgdb–args启动进程./spp_hlwcdkey_worker../etc/spp_worker.xml3gdb附加到已经运行的进程/home/user_00/services/spp_hlwcdkey/bingdb-p125094GDB中常用命令bt查看堆栈fx进入某层调用的函数P打印某变量B设置断点bfuncbfile.cpp:linenumbclass:funcInfobto查看设置的断点N执行下一步C继续执行上一条命令RunRunRunRun三、性能调试介绍1CPUoperation聚合操作,减少循环次数,batchmt_access2memorycopy减少内存copy,内存池参考transfer3磁盘操作聚合读写文件sendfile,减少进程用户态到内核态的切换和内存拷贝次数当需要传输一个文件时,具体流程如下:1调用read函数,文件数据为复制到内核缓冲区2读取函数返回,文件数据从内核缓冲区复制到用户缓冲区3写函数调用,将文件数据从用户缓冲区复制到与socket相关的内核缓冲区4数据从socket缓冲区复制到相关协议引擎硬盘—>内核buf—>用户buf—>socket相关缓冲区—>协议引擎的运行过程如下:1.sendfile系统调用,将文件数据拷贝到内核缓冲区2然后从kernelbuffer到kernel3中的socket相关buffer最后将socket相关buffer复制到协议引擎硬盘->kernelbuf——————————————>socket-relatedbuffers->protocolenginetransferfilefdandreadoffset.内核2.4版本后,sendfile实现方式更简单,系统调用方式依旧同样的,细节上和2.1版本的区别在于,当文件数据复制到内核缓冲区时,不再将所有数据复制到与socket相关的缓冲区中,而是只保存与位置和相关的数据记录数据长度到Socket相关缓存,实际数据会由DMA模块直接发送给协议引擎,减少再次复制操作4收发包epoll边缘方式收发包4、Spp来用工具查看qps命令:/home/user_00/services/spp_query_vipinfo/bin/stat.sh-worker输出:蓝鲸智云简介腾讯蓝鲸智云(简称蓝鲸)软件系统是一套基于PaaS技术的解决方案,致力于打造行业领先的一站式自动化运维平台。社区版和企业版已经上线,欢迎体验。请点击访问蓝鲸官网:http://bk.tencent.com/
