查看执行某个进程中系统调用--strace命令

公司分配给我的机器的 /data 目录下执行 ls -l 或者 ll 的时候,偶尔发现特别慢,大概有 5s,对于我来说,实在是忍不了忍不了。

于是看了 /data 目录是一个新挂的盘,我猜测这是个网络盘。为了验证这个想法。于是去跟踪命令 ll 所进行的系统调用。

执行 strace ls -l 后,发现主要卡在 poll 这个系统调用上了。这就验证了我的猜想,果然是网络盘,负载过高,导致比较慢。

strace 命令

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

1. 输出参数的含义

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。

查看更多

/proc/kcore文件解释

当有一天,我看到 Linux 下 /proc/kcore 文件有 128T 的时候,直接惊呆。

找到原文去看了看。

1
/proc/kcore is like an "alias" for the memory in your computer. Its size is the same as the amount of RAM you have, and if you read it as a file, the kernel does memory reads.

就是说 kcore 相当于内存的别名,变相代表着内存,可以当做内存文件执行内存读取,其实通过不同的命令查看该文件所显示的大小也是不一致的,比如:

查看更多

linux 系统日志分析

想要分析 linux 系统遇到的各种各样的情况,那就需要多看日志。

大部分的 linux 默认的日志守护进程是 syslog,位于 /etc/syslog 或者 /etc/syslogd 或者 /etc/rsyslog.d。默认配置文件为 /etc/syslog.conf 或者 rsyslog.conf。任何希望生成日志的程序都可以向 syslog 发送消息。

默认的配置下,日志文件通常保存在 /var/log 目录下

日志类型

一些常见的日志类型,但并不是所有的 linux 发行版都包含这些类型。

查看更多

gcc的使用

在windows 下动态链接库是以 .dll 后缀的文件,linux 是以 .so 为后缀的文件。

gcc 在执行编译工作的时候,总共需要4步:

  1. 预处理。生成.i 的文件【预处理器】
  2. 将预处理后的文件转换成汇编语言,生成 .s 文件【编译器】
  3. 将汇编变为目标代码,生成 .o 文件【汇编器】
查看更多

linux删除n天前的日志

linux 删除n天前的日志

删除文件命令: find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {};

例如:find /opt/soft/log -mtime +30 -name “* .log” -exec rm -rf {};

说明:将/opt/soft/log 目录下所有30天前带“.log”的文件删除

可以将这个语句写在shell脚本中,然后设置cron调度执行,让系统自动去清理想关文件。

shell 脚本如下:

查看更多
1
2
3
4
5
target:pererquisites
<tab> command1
<tab> command2
...
<tan> commandN

上面的这个就是一条简单的makefile

  • target:规则的目标,可以简单理解为这条规则存在的目的是什么。通常是程序中间或者最后需要生成的文件名,也可以不对应具体的文件,而仅仅就是个概念上的规则目标。
查看更多

gdb调试工具

gdb 调试工具

在对C/C++ 程序的调试,需要在编译前加上 -g 选项

  • 调试core 文件:gdb program core.11127 :调试 core 文件,program 就是执行文件
  • 调试服务程序:gdb program PID。如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach 上去,并调试他,program 应该在 PATH 环境变量中搜索得到

查看更多

查看linux硬件资源方法

查看linux 硬件资源方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uname -a # 查看内核/操作系统/CPU信息(含x86_64表示32位机器,i686表示32位机器)
head -n 1 /etc/issue # 查看操作系统版本,是数字1不是字母L
cat /proc/cpuinfo # 查看CPU信息的linux系统信息命令
hostname # 查看计算机名的linux系统信息命令
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备的linux系统信息命令
lsmod # 列出加载的内核模块
env # 查看环境变量资源
free -m # 查看内存使用量和交换区使用量
df -h # 查看各分区使用情况
du -sh # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载磁盘和分区
mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区
hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE # 查看启动时IDE设备检测状况网络
ifconfig # 查看所有网络接口的属性
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息进程
ps -ef # 查看所有进程
top # 实时显示进程状态用户
w # 查看活动用户
id # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务服务
chkconfig –list # 列出所有系统服务
chkconfig –list | grep on # 列出所有启动的系统服务程序
rpm -qa # 查看所有安装的软件包
cat /proc/cpuinfo :查看CPU相关参数的linux系统命令
cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令
cat /proc/meminfo :查看linux系统内存信息的linux系统命令
cat /proc/version :查看版本,类似uname -r
cat /proc/ioports :查看设备io端口
cat /proc/interrupts :查看中断
cat /proc/pci :查看pci设备的信息
cat /proc/swaps :查看所有swap分区的信息