Linux问题集合
1. Linux下如何定位死锁?
如果你想排查你的 Java 程序是否死锁,则可以使用 jstack
工具,它是 jdk 自带的线程堆栈分析工具。
在 Linux 下,我们可以使用 pstack
+ gdb
工具来定位死锁问题。
pstack 命令可以显示每个线程的栈跟踪信息(函数调用过程),它的使用方式也很简单,只需要 pstack <pid>
就可以了。Pid的话通过 ps -ef | grep xxx 来定位某个进程。
如:
可以看到,Thread 2 和 Thread 3 一直阻塞获取锁(pthread_mutex_lock)的过程,而且 pstack 多次输出信息都没有变化,那么可能大概率发生了死锁。
但是,还不能够确认这两个线程是在互相等待对方的锁的释放,因为我们看不到它们是等在哪个锁对象,于是我们可以使用 gdb 工具进一步确认。
2. linux下如何定位内存泄露?
首先根据top命令先定位可能存在内存泄露的进程,即实时显示,然后按占用的memory排序。
或者通过ps 查看进程的内存占用率(多采样一些),写个脚本定期去写入每分钟内存占用最多的n个进程。
代码编译时加上-g,然后再利用vargrind --tool=memcheck --leak-check=full ./program 会输出一些东西:
3. linux如何查看某个进程打开的文件?
lsof -p 进程号
列出某个用户 : lsof -u 用户
列出所有的网络连接: lsof -i
列出谁在使用端口:lsof -i :3306,还有比如tcp: lsof -i tcp
4. linux下如何跟踪进程中的系统调用?
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
5. linux基础操作
find查找文件名,grep查找文件内容。
按列切割文件cut
wc命令:
$wc -l file // 统计行数
$wc -w file // 统计单词数
$wc -c file // 统计字符数
查看磁盘空间 df -h
查看目录大小 du -sh
列出所有端口 (包括监听和未监听的):
netstat -a
列出所有 tcp 端口:
netstat -at
6. linux下的性能优化
分析系统瓶颈
系统响应变慢,首先得定位大致的问题出在哪里,是IO瓶颈、CPU瓶颈、内存瓶颈还是程序导致的系统问题;
使用top工具能够比较全面的查看我们关注的点:
$top
top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 377672k total, 322332k used, 55340k free, 32592k buffers
Swap: 397308k total, 67192k used, 330116k free, 71900k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 2856 656 388 S 0.0 0.2 0:49.40 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:15.20 ksoftirqd/0
4 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/
- 输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题);
- 输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题;
top第三行显示当前系统的,其中有两个值很关键:
- %id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;
- %wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;
分析内存瓶颈
free命令更直观
[/home/weber#]free
total used free shared buffers cached
Mem: 501820 452028 49792 37064 5056 136732
-/+ buffers/cache: 310240 191580
Swap: 0 0 0
系统实际可用的内存为free工具输出第二行的free+buffer+cached;也就是第三行的free值191580;
分析IO瓶颈
如果IO存在性能瓶颈,top工具中的%wa会偏高;
进一步分析使用iostat工具:
分析进程调用
通过top等工具发现系统性能问题是由某个进程导致的之后,接下来我们就需要分析这个进程;继续查询问题在哪;
这里我们有两个好用的工具: pstack和pstrace
pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;
而strace用来跟踪进程中的系统调用;这个工具能够动态的跟踪进程执行时的系统调用和所接收的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。
标签:0.0,top,free,问题,进程,内存,Linux,集合,CPU From: https://www.cnblogs.com/flameHkngiht/p/18153767