1. 使⽤两种命令创建⼀个⽂件?

 touch a.txt
 vi a.txt
 mkdir abc
 cat > a.txt 建⽴⼀⽂件,然后把接下来的键盘输⼊写⼊⽂件,直到按Ctrl+D为⽌.

2. 硬链接和软连接的区别?

硬链接:

1、⽂件有相同的 inode 及 data block;
2、只能对已存在的⽂件进⾏创建;
3、不能交叉⽂件系统进⾏硬链接的创建;
4、不能对⽬录进⾏创建,只可对⽂件创建;
5、删除⼀个硬链接⽂件并不影响其他有相同 inode 号的⽂件。

软链接:

1、软链接有⾃⼰的⽂件属性及权限等;
2、可对不存在的⽂件或⽬录创建软链接;
3、软链接可交叉⽂件系统;
4、软链接可对⽂件或⽬录创建;
5、创建软链接时,链接计数 i_nlink 不会增加;
6、删除软链接并不影响被指向的⽂件,但若被指向的原⽂件被删除,则相关软连接被称为死链接(即 danglinglink,若被指向路径⽂件被重新创建,死链接可恢复为正常的软链接)。

3. linux常⽤命令有哪些?

Java面试题 -Linux命令_# 面试题

4. 怎么查看⼀个java线程的资源耗⽤?

linux下,所有的java内部线程,其实都对应了⼀个进程id,也就是说,linux上的jvm将java程序中的线程映射为操作系统进程。

Java面试题 -Linux命令_# 面试题_02

5. Load过⾼的可能性有哪些?

cpu load的飙升,⼀⽅⾯可能和full gc的次数增⼤有关,⼀⽅⾯可能和死循环有关系

6. /etc/hosts⽂件什么作⽤?

在当前主机给ip设置别名,通过该别名可以访问到该ip地址,通过别名、ip访问的效果是⼀样的。

7. 如何快速的将⼀个⽂本中的"abc"转换成"xyz"?

Java面试题 -Linux命令_# 面试题_03

8. 如何在log⽂件中搜索找出error的⽇志?

cat xx.log | grep 'error'

9. 发现硬盘空间不够,如何快速找出占⽤空间最⼤的⽂件?

Java面试题 -Linux命令_# 面试题_04

10. Java服务端问题排查(OOM,CPU⾼,Load⾼,类冲突)?

. 业务⽇志相关:

  • i. less或者more
  • ii. grep
  • iii. tail -f filename
  • 注意:切忌vim直接打开⼤⽇志⽂件,因为会直接加载到内存的

. 数据库相关:

  • i. 登录线上库,show processlist查看数据库连接情况

. jvm相关:

  • i. jps显示java进程
  • ii. jinfo实时查看和调整jvm参数
  • iii. jstat监控jvm各种运⾏状态信息;
  • iv. jstack(Stack Trace for Java)命令⽤于⽣成JVM进程当前时刻的线程的调⽤堆栈,可以⽤来定位线程间死锁、锁等待、等待外部资源等
  • v. jmap(Memory Map for Java) 命令⽤于⽣成堆转储快照dump⽂件,除了这种⽅式还可以通过-XX:HeapDumpOnOutOfMemoryError参数,可以在虚拟机发⽣OOM的时候⾃动⽣成堆的dump⽂件,或者kill -3命令发出进程退出信号"吓唬"⼀下虚拟机,也能拿到dump⽂件。

e. oom问题:

  • i. 配置了-XX:+HeapDumpOnOutOfMemoryError, 在发⽣OOM的时候会在-XX:HeapDumpPath⽣成堆的dump⽂件,结合MAT,可以对dump⽂件进⾏分析,查找出发⽣OOM的原因。
  • ii. 另外⼿动dump堆快照,可以使⽤命令jmap -dump:format=b,file=file_name pid 或者kill -3 pid

f. 死锁:

  • i. jps -v
  • ii. jstack -l pid

g. 线程block、线程数暴涨:

  • i. jstack -l pid |wc -l
  • ii. jstack -l pid |grep “BLOCKED”|wc -l
  • iii. jstack -l pid |grep “Waiting on condition”|wc -l
    线程block问题⼀般是等待io、等待⽹络、等待监视器锁等造成,可能会导致请求超时、造成造成线程数暴涨导致系统502等。

h. 服务器问题:

  • i. cpu:top
  • ii. 内存:
  1. free -m -c10 -s1: a. -m:以MB为单位显示,其他的有-k -g -b b. -s: 间隔多少秒持续观察内存使⽤状况 c. -c:观察多少次
    Java面试题 -Linux命令_# 面试题_05
  2. vmstat 1 10:1表示每隔1s输出⼀次,10 表示输出10次 a. r: 运⾏队列中进程数量,这个值也可以判断是否需要增加CPU。(⻓期⼤于1) b. b: 等待IO的进程数量。
    Java面试题 -Linux命令_# 面试题_06 i. io:
    i. iostat -m 1 10:
  3. -m:某些使⽤block为单位的列强制使⽤MB为单位
  4. 1 10:数据显示每隔1秒刷新⼀次,共显示10次 Java面试题 -Linux命令_# 面试题_07 j. ⽹络:
    i. netstat -antp:
  5. -a (all)显示所有选项,默认不显示LISTEN相关
  6. -t (tcp)仅显示tcp相关选项
  7. -u (udp)仅显示udp相关选项
  8. -n 拒绝显示别名,能显示数字的全部转化成数字。
  9. -l 仅列出有在 Listen (监听) 的服服务状态
  10. -p 显示建⽴相关链接的程序名

Java常⽤问题排查⼯具及⽤法(top,iostat,vmstat,sar,tcpdump,jvisualvm,jmap,jconsole)

12. Thread dump⽂件如何分析(Runnable,锁,代码栈,操作系统线程id关联)

a. Thread Dump 能诊断的问题

  • i. 查找内存泄露,常⻅的是程序⾥load⼤量的数据到缓存;
  • ii. 发现死锁线程;

b. 如何抓取Thread Dump信息:

  • i. ⼀般当服务器挂起,崩溃或者性能底下时,就需要抓取服务器的线程堆栈(Thread Dump)⽤于后续的分析. 在实际运⾏中,往往⼀次 dump的信息,还不⾜以确认问题。为了反映线程状态的动态变化,需要接连多次做threaddump,每次间隔10-20s,建议⾄少产⽣三次 dump信息,如果每次 dump都指向同⼀个问题,我们才确定问题的典型性。
  • ii. linux命令获取:Java面试题 -Linux命令_# 面试题_08
  • iii. jdk⾃带⼯具获取:
  • Java面试题 -Linux命令_# 面试题_09

13. 如何查看Java应⽤的线程信息?

通过top命令拿到线程的pid后使⽤jstack命令

14. 计数?

wc -l