Linux(一)

Linux 怎么看负载?负载很高怎么定位?

    Load:Linux系统中,进程有 3 种状态:阻塞、可运行的【在运行队列 run queue 中】、正在运行的,Load 是指正在运行 和 准备好运行的进程总数。
    CPU Load 过高可能是代码中有 Bug(如 死循环)或者 Full GC次数太多。
    首先要找到哪几个线程在占用 CPU ,之后再通过线程的 id值在堆栈文件中查找具体的线程,看看出来什么问题。
(1)先查看进程号 top
    通过 top 命令动态查看进程变化,默认 5 秒一更新,会显示PID 、%CPU 等,执行 shift+p 可以以 CPU 的使用排序显示。比如使用CPU 最多的进程是 xxx。
(2)确定进程后 top -Hp xxx 显示 指定进程的线程
    这时显示的 PID 是线程ID。
(3)将线程 ID 从十进制转化成 十六进制
    可以用 Windows 计算器,也可以用 printf %x 十进制数 将输出十六进制形式。
(4)显示堆栈信息

jstack 进程号 |grep 线程号

    显示栈信息,可以关注一下有无 死锁 或者 等待资源、等待获取监视器、阻塞等。
( grep: 全局搜索正则表达式,就像在 IDEA 里 ctrl+F 。)

Linux 里的内存分为哪几个区域?

    Linux的内存空间简单可以分为5个部分:
(1)Text(代码区):存放可执行的指令操作,只读,不能写
(2) Bss(静态区 / 全局区):存放未初始化的全局变量和静态变量
(3)Data(数据区):存放初始化的全局变量和静态变量
(4)Stack:存放临时变量,函数参数等
(5)Heap:存放 new/ malloc 等动态申请的变量,用户必须手动进行 delete/free 操作。
    其中Stack和Heap的内存增长方向是相反的。

Linux 里的进程和线程有什么区别,

线程除了共享进程的变量还共享什么吗?

    进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会影响到其他进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。
    ✨ 但是 Java 里面不是这样的,子线程的生命周期与父线程无关。父线程终止了,子线程仍可以执行,一般子线程会具有和父线程相同的优先级。
    进程 ID 是唯一标识,int 类型,对于进程的管理都是通过PID来实现的。
    线程 ID 是 long 类型的,它的范围大得多,管理方式也不一样。线程ID一般在本进程空间内作用就可以了,其方式是,在内核创建一个内核态线程与之对应,也就是说每一个用户创建的线程都有一个内核态线程对应。但这种对应关系不是一对一,而是多对一的关系,也就是一个内核态线程可以对应着多个用户级线程。
    进程的备份关系森严,在父进程没有结束前,所有的子进程都尊从父子关系,也就是说A创建了B,则A与B是父子关系,B又创建了C,则B与C也是父子关系,A与C构成爷孙关系,也就是说C是A的孙子进程。在 Linux 系统上使用 pstree 命令打印进程树,可以清晰看到备份关系。
    多线程间的关系没有那么严格,不管是父线程还是子线程创建了新的线程,都是共享父线程的资源,所以,都可以说是父线程的子线程,也就是只存在一个父线程,其余线程都是父线程的子线程。

你常用到的 Linux 命令有哪些?

command [-options] parameter1 parameter2 ...
 命令       选项     =参数1      参数2 

切换到 root 身份:

su -

    建立新目录:

mkdir

    显示当前所在的目录:

pwd

    切换目录,利用相对路径(绝对路径一定是由 根目录 / 写起的,相对路线是指相对于目前工作目录的路径,不是由 / 写起的。)
    查看目录下的子目录或文件:

 ls
- -a 所有文件
 - -d 目录形式
 - -l 详细信息
 - -r 对目录反排序
 - -t 以时间排序
 - -r 对目录反排序

    删除文件或目录:

  rm

    直接查看文件内容。会把文件从第一行到最后一行连续显示在屏幕上:

  cat

    可翻页查看。less 可以向前翻动的,more 不行。head 只看前面几行,tail 只看后面几行:

more
less
head
tail

    压缩文件,原来的文件会被压缩成为 .gz 后缀的文件,源文件就不存在了,而且可以在 Windows 系统中解压缩:

gzip 

排序:

sort

看目前有谁在线:

who

将数据同步写入磁盘:

sync

关机:

shutdown

查看服务器端口连接情况
netstat :可显示当前服务器上所有端口及进程服务,与 grep 结合可查看某个具体端口及服务情况。
    
以上是命令,如果不记得选项或是参数的话,可以用联机帮助文件:
man、–help、info、usr/share/doc
(1) 如果是使用过的命令,却忘记了后面跟的 相关选项和参数,先使用 --help 来查询相关信息, 会显示基本语法、选项说明、examples 例子等。
(2)如果是没有使用过的命令,使用 man 或 info ,info 是把数据拆成一个个段落,每个段落占一个页,每个独立的页面称为一个 节点(node),而且每个页面中还有类似网页的超链接来跳到各不同的页面中。不过查询的目标数据的说明文件必须要以 info 的格式来写才能使用,支持 info 命令的文件默认是放在 /usr/share/info 目录中。
(3)如果想要一些 其他的服务,或想利用 一整组软件来完成某项功能时,到 /usr/share/doc 下查一查有无该服务的说明文件。

inode是什么?

    Linux 内核的文件系统 ext2 ,通常会把 两部分的数据分别存放在不同的区块,权限 和 属性(读写属性、文件的大小、拥有者 和 用户组、建立或状态改变的时间、最近一次读取的时间, 不记录文件名。) 放在 inode 中,实际数据放在 数据区块中。另外还有个 超级区块,会记录整个文件系统 的整体信息,比如 inode 和 数据区块的总量、使用量、剩余量等。
    一个文件会占用一个 inode,inode 会记录 文件的属性,和此文件 数据所在的区块号码,每个 inode 和 数据区块都有编号。inode 的数量 和 大小 在格式化就固定了。系统读取文件 是 先找到 inode,分析 inode 记录的权限 和 用户是否符合,符合才会读取区块内容。
    好处: ext2 是索引式文件系统,所以不太需要进行碎片整理。
    查看 root 目录内的文件 所占的 inode 号码:

ls -li

    查看各个磁盘分区可用的 inode 数量

 df -ih

    

挂载是什么?

    每个文件系统都有独立的 Inode、 区块、 超级区块等信息,这个文件系统要链接到目录树才能被使用,将 文件系统 与 目录树 结合的操作 称为 “挂载”,挂载点一定是目录,该目录是进入该文件系统的入口。

hosts 文件是做什么的?

    纯文本形式。
    这个文件包含 IP地址 到 HOST name(主机名)的映射关系,提高解析效率。

  • 磁盘内存不够了,怎么找到大的文件?
    可以文件按大小排序:
du -h * | sort -n

    du (disk usage)命令 可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。-n 是以纯数字进行排序,默认是以文字格式。
    查看某个文件占的内存大小:du -h 文件名

  • NIO 底层 Linux 用的 epoll 了解吗?
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值