Java面試題 -Linux命令

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常⽤命令有哪些?

在這裏插入圖片描述

4. 怎麼查看⼀個java線程的資源耗⽤?

linux下,所有的java內部線程,其實都對應了⼀個進程id,也就是說,linux上的jvm將java程序中的線程映射爲操作系統進程。

在這裏插入圖片描述

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

cpu load的飆升,⼀⽅⾯可能和full gc的次數增⼤有關,⼀⽅⾯可能和死循環有關係

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

在當前主機給ip設置別名,通過該別名可以訪問到該ip地址,通過別名、ip訪問的效果是⼀樣的。

7. 如何快速的將⼀個⽂本中的"abc"轉換成"xyz"?

在這裏插入圖片描述

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

cat xx.log | grep 'error'

9. 發現硬盤空間不夠,如何快速找出佔⽤空間最⼤的⽂件?

在這裏插入圖片描述

10. Java服務端問題排查(OOM,CPU⾼,Load⾼,類衝突)?

a. https://blog.csdn.net/and1kaney/article/details/51214219

b. 業務⽇志相關:

  • i. less或者more
  • ii. grep
  • iii. tail -f filename
  • 注意:切忌vim直接打開⼤⽇志⽂件,因爲會直接加載到內存的

c. 數據庫相關:

  • i. 登錄線上庫,show processlist查看數據庫連接情況

d. 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:觀察多少次
    在這裏插入圖片描述
  2. vmstat 1 10:1表示每隔1s輸出⼀次,10 表示輸出10次 a. r: 運⾏隊列中進程數量,這個值也可以判斷是否需要增加CPU。(⻓期⼤於1) b. b: 等待IO的進程數量。
    在這裏插入圖片描述 i. io:
    i. iostat -m 1 10:
  3. -m:某些使⽤block爲單位的列強制使⽤MB爲單位
  4. 1 10:數據顯示每隔1秒刷新⼀次,共顯示10次 在這裏插入圖片描述 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)

https://blog.csdn.net/xad707348125/article/details/51985854

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命令獲取:在這裏插入圖片描述
  • iii. jdk⾃帶⼯具獲取:
  • 在這裏插入圖片描述
  • c. 分析:https://blog.csdn.net/rachel_luo/article/details/8920596

13. 如何查看Java應⽤的線程信息?

通過top命令拿到線程的pid後使⽤jstack命令

14. 計數?

wc -l
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章