strace

Linux下分析bin文件的10种方法

你离开我真会死。 提交于 2020-10-03 12:26:36
这世界有10种人,一种人懂二进制,另一种人不懂二进制。 ——鲁迅 大家好,我是良许。 二进制文件是我们几乎每天都需要打交道的文件类型,但很少人知道他们的工作原理。这里所讲的二进制文件,是指一些可执行文件,包括你天天要使用的 Linux 命令,也是二进制文件的一种。 Linux 系统给我们提供了非常多用于分析二进制文件的工具,不管你在 Linux 下从事的是何种工作,知道这些工具也会让你对你的系统更加了解。 在本文中,将介绍几种最常用的用于分析二进制文件的工具及命令,这些工具在大部分发行版里可以直接使用,如果不能直接用的话,可以自行安装。 file file 命令用于分析文件的类型。 如果你需要分析二进制文件,可以首先使用 file 命令来切入。我们知道,在 Linux 下, 一切皆文件 ,但并不是所有的文件都具有可执行性,我们还有各种各样的文件,比如:文本文件,管道文件,链接文件,socket文件,等等。 在对一个文件进行分析之前,我们可以首先使用 file 命令来分析它们的类型。当然除此之外,我们还可以看到一些其它信息。 $ file /bin/pwd /bin/pwd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux

API返回延迟,FPM重启后恢复之后又重现 问题解决方案

泪湿孤枕 提交于 2020-10-02 20:05:54
背景 最近在提供后台API时,提供了一个简单逻辑的接口 部署在测试环境,自测没问题,提交测试 突然有一天,接口响应延迟严重,几乎每次都是3-4秒返回 这对于一个接口来说,肯定是有问题的 于是便有了以下的方法尝试 重启FPM 最开始以为不是什么大问题,猜想可能是fpm问题 毕竟测试环境,部署代码繁多 重启后,接口响应正常,可不一会就又复现 重新分析定位问题 经过几次的尝试后,发现问题其实没有那么简单 重启fpm后,过了不到几秒,问题依然复现 编写简单的php文件,无复杂逻辑,只输出字符串,问题复现 命令行执行文件,无此问题 经过以上尝试,确认是FPM的问题 或者PHP的初始化解析执行的问题,当时想是不是有特定的模块加载 经过php -m 查看,无特殊模块(其实应该仔细看看,所以才绕了弯路) 日志定位 有了上面的分析,最先想到的是利用日志查看问题 查看nginx日志 nginx 日志 格式,添加详细的 各个时间段的相应 log_format main '$remote_addr [$host] - $remote_user [$time_local] $request upstream_response_time: $upstream_response_time request_time: $request_time upstream_connect_time: $upstream

技术分享 | MySQL 主机该如何配置 fs.aio-max-nr

不羁的心 提交于 2020-08-17 04:53:56
作者:洪斌 爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。 本文来源:转载自公众号-玩转MySQL *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 MySQL 默认是启用 innodb_use_native_aio,使用异步 IO 操作,MySQL 启动时所需 aio slot 若超过系统当前 fs.aio-max-nr 设置,则无法启动报错 InnoDB: io_setup() failed with EAGAIN after 5 attempts. 通常在单机单实例环境下很少会遇到超出 aio-max-nr 的问题,若部署单机多实例,会大概率遇到此问题。我们来分析下该如何配置 fs.aio-max-nr 参数。关于 aio-nr 与 aio-max-nr aio-nr is the running total of the number of events specified on the io_setup system call for all currently active aio contexts. If aio-nr reaches aio-max-nr then io

8-dentry占用过多内存的分析

一个人想着一个人 提交于 2020-08-15 10:33:17
https://blog.51cto.com/lxshopping/1573631 https://yq.aliyun.com/articles/131870 http://farll.com/2016/10/high-memory-usage-alarm/ https://zhuanlan.zhihu.com/p/43133085 https://my.oschina.net/goopand/blog/465518/print dentry 导致的延迟 https://www.lizenghai.com/archives/17619.html strace 使用 https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 来源: oschina 链接: https://my.oschina.net/u/4407103/blog/4307484

【Linux】iowait使用率高与僵尸进程多分析方法

感情迁移 提交于 2020-08-11 15:52:53
WEL测试:这是什么?我想看看,看了会不会中毒呀?有点害怕 iowaite升高分析流程: 1、使用 top 查看系统性能指标,发现 iowait %数值异常,查看状态为 D 的进程。 2、使用 dstat 观察 CPU 和 I/O 的使用情况, 每当 iowait 升高(wai)时,磁盘的读请求(read)都会很大 。 3、通过 pidstat -d -p pid 观察当前进程的 KB_rb、kb_wr 指标情况,如果对应进程这两个指标为0,可以换成当前命令: pidstat -d 1 10 观测当前系统所有进程,找到进行磁盘读写的进程ID,执行第三步操作。 4、通过 strace -p PID 命令查看对应进程的父进程,如果对应进程不存在,可以使用 perf record -g 命令录制当前系统监测数据 5、执行**perf report **进行数据分析,找到出去内核进程外的其他进程,查看其系统调用问题。 僵尸进程分析流程: 1、使用top 查看系统性能指标,查看状态为 Z 的进程,获取进程的PID 2、执行命令 pstree -aps PID 获取该进程的父进程,找到对应应用程序。 3、查看 app 应用程序的代码,看看子进程结束的处理是否正确,比如有没有调用 wait() 或 waitpid() ,或是有没有注册 SIGCHLD 信号的处理函数。 来源: oschina

Linux神器strace的使用方法及实践

拥有回忆 提交于 2020-08-11 15:39:22
在Linux系统中,strace命令是一个集诊断、调试、统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用,接下来就Linux系统调用工具strace的使用方法和实践给大家做个详细介绍,一起来了解下strace的操作实例吧。 【场景】 1、在操作系统运维中会出现程序或系统命令运行失败,通过报错和日志无法定位问题根因。 2、如何在没有内核或程序代码的情况下查看系统调用的过程。 【说明】 1、strace是有用的诊断,说明和调试工具,Linux系统管理员可以在不需要源代码的情况下即可跟踪系统的调用。 2、strace显示有关进程的系统调用的信息,这可以帮助确定一个程序使用的哪个函数,当然在系统出现问题时可以使用 strace定位系统调用过程中失败的原因,这是定位系统问题的很好的方法。 【参数解析】 1. strace安装方法: CentOS/EulerOS系统 # yum install strace Ubuntu系统: # apt-get install strace –y 2.strace的常用参数及示例 -c 统计每一系统调用的所执行的时间,次数和出错的次数等。 示例:打印执行uptime时系统系统调用的时间、次数、出错次数和syscall # strace -c uptime -d 显示有关标准错误的strace本身的一些调试输出。 -f 跟踪子进程

cpu故障定位 top strace pstack

吃可爱长大的小学妹 提交于 2020-08-11 06:31:09
一次服务器CPU占用率高的定位分析 推荐 背景 :通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的。幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有对服务造成影响。随着 上次我们找到那个吃IO的罪犯 ,这次我们要追捕的是潜伏在团体中的特务,更加惊险刺激哟! 系统环境 用 top 命令很容易定位到是谁占用CPU最高。 以我们的这个业务进程(imDevServer)举例,为什么说这货是个潜伏者呢?因为这是个多线程的进程,我们要知道实际上占用cpu的最小单位是线程,所以肯定是众线程中的某一个或几个占用CPU过高导致的。 top -H -p pid 命令查看进程内各个线程占用的CPU百分比 如上图所示我们可以看出id为8863的线程cpu占用率最高。好,我们现在只要能找到他偷走的cpu就好了,虽然这小子嘴巴严,但是我们有一套完善的审问流程,不怕他不招。首先出马的是 strace -T -r -c -p pid 命令 它的作用是查看系统调用和花费的时间,epoll_wait虽然占用的调用时间多,但是他本身是个正常的阻塞调用。 我们接着让 pstack pid 出马 可以看到每个线程的调用堆栈,找到已经找出的占用CPU最高的那个线程,然后看他的调用堆栈,很容易看出在哪一步逻辑上导致了busy

strace命令使用

柔情痞子 提交于 2020-08-11 01:21:16
命令介绍 strace是Linux环境下的一款程序调试工具,用来输出一个应用程序所使用的系统调用。 strace底层使用内核的ptrace特性来实现其功能。 什么是系统调用? 系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给应用程序的一个接口。 常用选项 -t 在每行输出的前面显示时间(精确到秒) -tt 在每行输出的前面显示时间(精确到毫秒) -T 显示每次系统调用所花费的时间 -v 对于某些相关调用,显示详细信息(把完整的环境变量,文件stat结构等打出来) -f 跟踪目标进程,以及目标进程创建的所有子进程 -e 指定要跟踪的系统调用 -o 把strace的输出写到文件中 -s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节 -p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。 -c 统计每种系统调用所执行的时间,调用次数,出错次数。 使用 1.追踪打开文件的系统调用 [ root@localhost ~ ] # strace cat /etc/hosts execve ( "/usr/bin/cat" , [ "cat" , "/etc/hosts" ] , 0x7fff79f5beb8 /* 26 vars */ ) =

[PHP] 查找使用的哪个配置文件php.ini

你说的曾经没有我的故事 提交于 2020-08-10 16:46:23
在配置php的过程中经常遇到不知道php.ini文件在哪,以及不知道哪一个php.ini在起作用,改动了配置后依然不生效 可以有下面的方法去查找 php -i|grep php.ini strace -e open php -m 在这个命令里去查看php命令打开了哪个php.ini文件,非常的精确 上次配置完php8,修改了配置文件依然不生效,使用上面的方法才看到 strace -e open /usr/local/php8/bin/php -m 也可以看到查找扩展的路径 , 把文件路径放对,就生效了 php-fpm下我推测也是同级目录下,放对位置也ok了 我的fpm路径是 /usr/local/php8/sbin/php-fpm 来源: oschina 链接: https://my.oschina.net/u/4254929/blog/4327700

Spring Boot“内存泄漏”?看看美团大牛是如何排查的

ぐ巨炮叔叔 提交于 2020-08-09 14:48:38
   20 大进阶架构专题每日送达      来自:美团技术团队   链接:8rr.co/38Kh   为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize=128m -XX:InitialCodeCacheSize=128m, -Xss512k -Xmx4g -Xms4g,-XX:+UseG1GC -XX:G1HeapRegionSize=4M”,实际使用的物理内存如下图所示:      top命令显示的内存情况   排查过程 1. 使用Java层面的工具定位内存区域(堆内内存、Code区域或者使用unsafe.allocateMemory和DirectByteBuffer申请的堆外内存)   笔者在项目中添加-XX:NativeMemoryTracking=detailJVM参数重启项目,使用命令jcmd pid VM.native_memory detail查看到的内存分布如下: