[常常遇到]通过Strace定位故障原因之connect() failed (110: Connection timed out) while connecting to upstream

jackxiang 2017-6-22 23:48 | |
分析文章:https://huoding.com/2013/10/06/288
内存不够用时通过它来申请新内存(data segment)


「man brk」来查询一下它的含义:

brk() sets the end of the data segment to the value specified by end_data_segment, when that value is reasonable, the system does have enough memory and the process does not exceed its max data size (see setrlimit(2)).

在Strace中和操作花费时间相关的选项有两个,分别是「-r」和「-T」,它们的差别是「-r」表示相对时间,而「-T」表示绝对时间。简单统计可以用「-r」,但是需要注意的是在多任务背景下,CPU随时可能会被切换出去做别的事情,所以相对时间不一定准确,此时最好使用「-T」,在行尾可以看到操作时间,可以发现确实很慢。 更多:https://blog.huoding.com/2013/10/06/288


shell> strace -T -p $(pgrep -n php-cgi) 2>&1 | grep -B 10 brk
stat("/path/to/script.php", {...}) = 0 <0.000064>
brk(0x1d9a000) = 0x1d9a000 <0.000067>
brk(0x1dda000) = 0x1dda000 <0.001134>
brk(0x1e1a000) = 0x1e1a000 <0.000065>
brk(0x1e5a000) = 0x1e5a000 <0.012396>
brk(0x1e9a000) = 0x1e9a000 <0.000092>

cat bak0.c
#include<stdio.h>
#include <unistd.h>

int main()
{
    int*p1 = sbrk(4);
    int*p2 = sbrk(4);
    int*p3 = sbrk(4);
    printf("pid%d\n",getpid());
    printf("p1:%p\n",p1);
    printf("p2:%p\n",p2);
    printf("p3:%p\n",p3);
     while(1);
}

gcc bak0.c  -o main
#./main
pid2816
p1:0x602000
p2:0x602004
p3:0x602008
ps -ef|grep main
root      2994  2461 94 10:26 pts/3    00:00:07 ./main
此时我们可以看下他的maps文件
cat /proc/2994/maps
00602000-00603000 rw-p 00000000 00:00 0                                  [heap]


2)  内核维护一个指针,假设是p,那么sbrk(0)或得到一个没有被占用的虚拟内存地址,但是此时不分配空间,但是此时只是初始化p,所以你如果对此时得到的内存地址赋值,那么就会出现段错误
cat bak.c
#include<stdio.h>
#include<unistd.h>

int main()
{
         int *p = sbrk(0);
         printf("%p\n",p);
         *p = 111;

}
gcc bak.c -o main

#./main
0x602000
段错误(吐核)


来自:https://blog.csdn.net/xiaoxiaopengbo/article/details/78206953
https://www.cnblogs.com/chengxuyuancc/p/3566710.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/9203/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2019-9-16 10:33
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]