首页 > 系统相关 >Linux问题集合

Linux问题集合

时间:2024-04-23 21:22:38浏览次数:26  
标签:0.0 top free 问题 进程 内存 Linux 集合 CPU

Linux问题集合

1. Linux下如何定位死锁?

如果你想排查你的 Java 程序是否死锁,则可以使用 jstack 工具,它是 jdk 自带的线程堆栈分析工具。

在 Linux 下,我们可以使用 pstack + gdb 工具来定位死锁问题。

pstack 命令可以显示每个线程的栈跟踪信息(函数调用过程),它的使用方式也很简单,只需要 pstack <pid> 就可以了。Pid的话通过 ps -ef | grep xxx 来定位某个进程。

如:image-20240416225318951

可以看到,Thread 2 和 Thread 3 一直阻塞获取锁(pthread_mutex_lock)的过程,而且 pstack 多次输出信息都没有变化,那么可能大概率发生了死锁。

但是,还不能够确认这两个线程是在互相等待对方的锁的释放,因为我们看不到它们是等在哪个锁对象,于是我们可以使用 gdb 工具进一步确认。

image-20240416225403075

2. linux下如何定位内存泄露?

首先根据top命令先定位可能存在内存泄露的进程,即实时显示,然后按占用的memory排序。

或者通过ps 查看进程的内存占用率(多采样一些),写个脚本定期去写入每分钟内存占用最多的n个进程。

代码编译时加上-g,然后再利用vargrind --tool=memcheck --leak-check=full ./program 会输出一些东西:

image-20240421174522330

3. linux如何查看某个进程打开的文件?

lsof -p 进程号

列出某个用户 : lsof -u 用户

列出所有的网络连接: lsof -i

列出谁在使用端口:lsof -i :3306,还有比如tcp: lsof -i tcp

4. linux下如何跟踪进程中的系统调用?

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

image-20240416230807271

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工具:

image-20240421172328122

分析进程调用

通过top等工具发现系统性能问题是由某个进程导致的之后,接下来我们就需要分析这个进程;继续查询问题在哪;

这里我们有两个好用的工具: pstack和pstrace

pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;

而strace用来跟踪进程中的系统调用;这个工具能够动态的跟踪进程执行时的系统调用和所接收的信号。是一个非常有效的检测、指导和调试工具。系统管理员可以通过该命令容易地解决程序问题。

标签:0.0,top,free,问题,进程,内存,Linux,集合,CPU
From: https://www.cnblogs.com/flameHkngiht/p/18153767

相关文章

  • 在Linux下查看GPU的使用情况
    1.nvidia-smi无需安装,nvidia自带,最常用。会显示GPU使用情况,但是过于简陋。  2.gpustat(彩色并简约的显示)安装:pipinstallgpustat使用:gpustat显然这种带高亮的显示看起来更舒服,而且可以显示出完整显卡的完整名称,以及正在使用GPU的用户,一个缺点就是不能像nvidia-smi一样显......
  • 聊聊 Linux iowait
    哈喽大家好,我是咸鱼。我们在使用top命令来查看Linux系统整体CPU使用情况的时候,往往看的是下面这一列:%Cpu(s):0.0us,0.0sy,0.0ni,100.0id,68.0wa,0.0hi,0.0si,0.0st其中,man手册解释wa表示CPU在等待I/O操作(iowait)的时间百分比。上面输出显......
  • linux下Mysql安装
    1、安装查看有没有安装过:yumlistinstalledmysql*rpm-qa|grepmysql*查看有没有安装包:yumlistmysql*安装mysql客户端:yuminstallmysql安装mysql服务器端:yuminstallmysql-server 在centOs7中未找到yuminstallmysql-devel2、启动  &&  停止数据......
  • Caprine:适用于Linux的Facebook Messenger桌面应用程序
    Caprine是一款Linux桌面应用程序,可让您直接从计算机访问FacebookMessenger 。它提供了一种在Messenger上与朋友和家人聊天的便捷方式,无需打开网络浏览器。Caprine提供了类似于Messenger移动应用程序的用户友好界面,使其易于导航和使用。您可以接收新消息的通知、发送表情......
  • return try-catch 的问题
    publicstaticStringtest(){try{System.out.println("执行try代码块");returntest1();}catch(Exceptione){e.printStackTrace();return"";}finally{System.out.println("执行finally代码块");}}publicstaticStringtest1(){......
  • 做工程,您是否还在为这些问题所困扰?
    您是否还在为这些问题所困扰?1、项目管理不全面,无法实现项目闭环管理2、同期项目杂乱,施工进度难把控3、预算误差大,超支无提醒4、成本管理失控,导致利润下滑5、物资领用混乱,增加无谓消耗6、垫资工程管理松散,施工质量低下7、工程财务管理无备份,缺少参考依据8、工程资料查找难,......
  • cmd命令行运行Java文件产生乱码问题的解决方式
    1.第一种方式(改变记事本的编码集为ANSI)另存为ANSI 这样就OK啦2.第二种方式 改变cmd编码集 javac-encodingutf8 源文件名.java ......
  • Linux服务器中Docker部署的GitLab镜像访问出现500错误
    一背景这几天发现在Linux服务器中Docker部署的GitLab镜像访问出现500错误,在重启服务器后大概10分钟再次出现该情况,后面登录服务器一步步排查最终解决问题,现在将解决问题的过程做一个总结。二过程分析首先第一步就是看看我们Docker目录下文件占用的情况,因为我们的Linux服务......
  • initialize方法重定向无限循环问题解决方案
    由于在initialize方法中进行重定向而造成的重定向循环。当session('?user_id')检查失败时,你的代码会尝试重定向到登录页面。如果登录页面或者处理登录的控制器也继承自同一个基类(或者有类似的initialize检查),这将导致每次尝试访问登录页面时都会再次执行重定向,从而陷入无限循......
  • 三线共点和三点共线问题 | 立体几何
    前言平面的三条基本性质,也叫三条公理:基本事实1:过不在一条直线上的三个点,有且只有一个平面.基本事实2:如果一条直线上的两个点在一个平面内,那么这条直线在这个平面内.基本事实3:如果两个不重合的平面有一个公共点,那么它们有且只有一条过该点的公共直线.平面的基本性......