1.Linux 负载很高怎么定位?
负载 Load:进程分为三种状态:阻塞、可运行的、正在运行的,可运行的进程 与 正在运行的进程 的总和就是 Load。
CPU Load 过高可能是代码中有 bug 如 死循环 或 Full GC 次数过高。
可以用 top 指令,每 5 秒更新一次进程状态,显示进程 ID 和 所占的内存 %CPU,然后 shift+P 进行降序排序,就可以找到占 CPU 最多的进程号,然后使用 top -Hp 进程号 就可以看到 进程下的线程占 CPU 情况,这时的 PID 是线程号,它是十进制的,需要转化成 十六进制的,使用 jstack 进程号|grep 全局搜索 线程号 去看 堆栈中的情况。
2.Linux 里的内存分为哪几个区域?
(1)Text 放置指令,只能读,不能写
(2)BSS 放置未经过初始化的全局变量、静态变量
(3)Data 放置初始化后的全局变量、静态变量
(4)堆 heap :new / malloc 等动态申请的变量,用户必须用 delete / free 操作释放内存
(5)栈 stack: 放置临时变量,如函数参数之类的
3.Linux 里的进程和线程有什么区别
进程是相对独立的,一个进程的终止不会影响其他进程;而在 Linux 中,父线程终止,子线程也会终止;而一个子线程终止,一般其他子线程不会随之终止,除非调用 exit()方法。
进程之间的关系相对森严,可以通过 pstree 查看进程树,父进程可以有子进程,子进程作为父进程,再有子进程... 而线程只会有一个父线程,其他都是子线程。
进程 ID 是 int 类型,而 线程 ID 是 long 类型,范围更广。
还有在 Java 中,子线程的生命周期与父线程无关,父线程终止,子线程也可以执行。
4.常用到的 Linux 命令有哪些?
切换到 root 身份: su -
新建目录:mkdir
查看目录下的子目录:ls
查看当前所在目录:pwd
删除 rm
展示文件内容:cat、less(可向前翻页)、more、head、tail
看当前在线用户:who
压缩文件:gzip 会生成 .gz 的文件,源文件就不存在了,在 Windows 下也可以解压缩
排序:sort
将数据同步写入磁盘:sync
关机:shutdown
查看服务器端口连接情况:netstat 可显示当前服务器上所有端口及进程服务,可以用 grep 查看指定端口
如果不记得选项和参数,对于使用过的指令,可以用 --help 获取帮助文档,可以看到基本语法、选项说明、例子等;对于没有使用过的指令,可以使用 man 或者 info ,info 是把页面以节点的形式展示,类似于网页的超链接。如果还是获取不到帮助文档,可以到 usr6/doc 中查看。
5.inode是什么
Linux 的文件系统 ext2,由两部分组成,一部分放置文件的 权限、属性(如文件大小、用户组、读写属性、建立或状态改变的时间、最近一次读取的时间 等),叫 inode,一部分放置文件真实的数据,叫 数据区块,还有 超级区块,放置 inode 和 数据区块的信息,比如:已经使用的内存、剩余内存。每个文件对应一个 inode,每个 数据区块 和 inode 都是有编号的,查找文件时先看 inode,权限是否符合,才到数据区块获取文件。
好处:ext2 是索引式文件系统,所以不太需要进行碎片整理。
6.挂载是什么
文件系统需要和目录结合才可以使用,结合点叫挂载。挂载点一定是目录,该目录是进入该文件系统的入口。
7.hosts 文件是做什么的
操作系统中存储 域名 与 IP 映射的缓存。
8.磁盘内存不够,怎么找到大的文件
du -h *|sort -n (按数字排序,默认是按文本)