龙空技术网

生产接口运行缓慢,莫慌-strace

Java资深架构师 85

前言:

现在我们对“ubuntu系统卡住了该怎么办”都比较关心,看官们都想要知道一些“ubuntu系统卡住了该怎么办”的相关资讯。那么小编也在网摘上搜集了一些对于“ubuntu系统卡住了该怎么办””的相关内容,希望朋友们能喜欢,兄弟们快快来了解一下吧!

面对以下问题

生产服务突然卡住,接口响应缓慢

到底是什么操作在消耗cpu

项目配置的文件没生效(如:spring boot多文件根据优先级加载的)

针对以上问题,当束手无策的时候,strace他也许可以帮到你,他也在工作中帮我排除了众多障碍。

strace 就是跟踪进程行为的一大神器,你可以通过它知道正在执行的进程中到底发生了什么,以及程序为什么出现错误等等。

安装方法

CentOS/EulerOS系统:# yum install straceUbuntu系统:# apt-get install strace –y

常用参数及示例

-c: 统计每一系统调用的所执行的时间、次数和出错的次数等。示例:打印执行uptime时系统系统调用的时间、次数、出错次数和syscall。# strace -c uptime-i: 在系统调用时打印指令指针。-e trace=file: 跟踪所有以文件名作为参数的系统调用。示例:打印执行ls时跟文件有关的系统调用。# strace -e trace=file ls-e trace=process: 跟踪涉及过程管理的所有系统调用。这对于观察进程的派生、等待和执行步骤很有用。-e trace=network: 跟踪所有与网络相关的系统调用。-e trace=signal: 跟踪所有与信号相关的系统调用。-e trace=ipc: 跟踪所有与IPC相关的系统调用。

下面举两个实际使用的例子:

一:系统卡住问题排查

strace -tt -T -v -f -e trace=all -o strace.log -s 1024 -p [pid]

也可以随进程一起启动此命令:

strace -tt -T -v -f -e trace=all -o strace.log -s 1024 lua test.lua

输出服务所有的系统调用,查看哪个系统调用消耗了大量的时间,我们先看线程阻塞在哪里,以下发下是被write调用阻塞。

我们再运行 strace -tt -T -v -f -e trace=all -o strace.log -s 1024 -p 19843

发现大量的write调用导致系统运行缓慢(系统调用应该在微秒级别,如 0.000019秒,以下花费5s已经相当耗时了。)

检查代码发现代码里print了较大的字符串。至于print标准出输出为什么会阻塞耗时,可以自行了解。

二:程序正在做什么

通过strace -c -p [进程id] 连续运行几次发现系统时间都花费在write操作上

我们可以举一反三,我们的系统基本都涉及到系统调用,可以使用此命令排查关于系统调用的大部分问题。至于每种系统调用的含义可以自行了解。

附上别的博主写的更详细的使用方式:

标签: #ubuntu系统卡住了该怎么办