Linux系統(tǒng):第十一章:常用命令
Linux命令:
查看java進程:ps -ef |grep java
查看實時日志:tail -f 文件名稱
殺掉進程:kill -9 進程的PID
復制文件:cp 文件路徑/文件名稱 文件路徑/文件名稱
啟動:service rabbitmq-server start
關閉:service rabbitmq-server stop
重啟:service rabbitmq-server restart
查看所有的隊列:rabbitmqctl list_queues
清除所有的隊列:rabbitmqctl reset
查看用戶:rabbitmqctl list_users
查看狀態(tài):rabbitmqctl status
whereis搜索redis服務執(zhí)行文件:whereis redis-server
單個文件可以使用vi或vim編輯器打開日志文件,使用編輯器里的查找功能。在查看模式下,符號/后面跟關鍵字向下查找,符號?后面跟關鍵字向上查找,按n查找下一個,按N查找上一個
jar包運行:nohup java -Xms 128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -jar jar包名稱 &
1.nohup
nohup: 不掛斷的運行,注意并沒有后臺運行的功能.用nohup命令可以使命令永久的執(zhí)行,和客戶端沒有任何關系.
&: 后臺運行
nohup java -jar xxx.jar &
可以讓jar包一直后臺運行
缺省的情況下會默認將信息輸出到nohup.out文件中
2.-server
啟動server版的jvm
3.JVM的內存分配
-Xms: 分配堆最小內存(初始堆大小),默認為物理內存的1/64,空余堆內存小于40%時,jvm就會增大堆內存大小直到xmx
-Xmx: 分配堆最大內存,默認為物理內存的1/4,默認空余堆內存大于70%,jvm就會減小堆內存大小直到xms
-Xmn: 年輕代大小,整個堆大小=年輕代大小+年老代大小+持久代大小,當增大年輕代大小時,就會減小年老代大小
此值對系統(tǒng)性能影響較大,sun官方推薦為整個堆得3/8
-XX:NewSize: 設置年輕代大小
-XX:MaxNewSize: 年輕代最大值
-XX:PermSize: 設置持久代初始值,默認為物理內存的1/64
-XX:MaxPermSize: 設置持久代最大值,默認為物理內存的1/4
-Xss: 每個線程的堆棧大小,jdk5.0后每個線程堆棧大小為1M,以前每個線程堆棧大小為256k,根據(jù)應用的線程所需內存
大小進行調整.在相同物理內存下,減小該值能生成更多的線程,但是操作系統(tǒng)對一個進程的線程數(shù)一般限制在3000
-5000左右. 一般小的應用可以設置為128k,大的建議設置為256k.
-XX:ThreadStackSize: 線程堆大小,一般設置-Xss就可以了
-XX:NewRatio: 年輕代與年老代的比值(除去持久代),-XX:NewRatio=4表示年輕代與年老代所占比值為1:4,Xms=Xmx并
且設置了Xmn的情況下,該參數(shù)不需要進行設置
-XX:SurvivorRatio: Eden區(qū)和Survivor區(qū)的大小比值, 設置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個
Survivor區(qū)占整個年輕代的1/10
-XX:LargePageSizeInBytes: 內存頁的大小不可設置過大,會影響Perm的大小,128m
-XX:+UseFastAccessorMethods: 原始類型的快速優(yōu)化
-XX:+DisableExplicitGC: 關閉System.gc(), System.gc()用于調用垃圾收集器,在調用時,垃圾收集器將運行以回收
未使用的內存空間,它將釋放被丟棄對象占用的內存.一般分配內存后,可以不可慮內存管理.
-XX:MaxTenuringThreshold: 垃圾最大年齡,年輕代的最大存活周期,超過閾值就會進入年老代
-XX:+AggressiveOpts: 加快編譯
-XX:+UseBiasedLocking: 鎖機制的性能改善
-Xnoclassgc: 禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB: 每兆堆空閑空間中SoftRefrence的存活時間,判斷軟引用對象有多久時間沒有被使用
則被回收,默認是1s
-XX:PretenureSizeThreshold: 對象超過多大事直接在舊生代分配,默認是0
-XX:TLABWasteTargetPercent: TLAB占eden區(qū)的百分比,默認是1%
-XX:+CollectGen0First: FullGC時是否先YGC,默認是false
YGC: 對新生代堆進行gc ; FullGC: 全堆范圍的gc,默認堆空間使用到達80%的時候會觸發(fā)fgc.
并行收集器相關參數(shù):
-XX:+UseParallelGC: Full GC采用parallel MSC,選擇垃圾收集器為并行收集器,此配置僅對年輕代有效,即上述配置下,年輕代使用并行收集,
年老代仍舊使用串行收集
-XX:+UseParNewGC: 設置年輕代為并行收集,可與CMS收集同時使用,jdk5.0以后,JVM會根據(jù)系統(tǒng)配置自行設置,所以無需再設置此值
-XX:ParallelGCThreads: 并行收集器的線程數(shù),此值最好配置與處理器數(shù)目相等,同樣適用于CMS
-XX:+UseParallelOldGC: 年老代垃圾收集方式為并行收集(Parallel Compacting)
-XX:MaxGCPauseMillis: 每次年輕代垃圾回收的最長時間(最大暫停時間),如果無法滿足此時間,JVM會自動調整年輕代大小,以滿足此值.
-XX:+UseAdaptiveSizePolicy: 自動選擇年輕代區(qū)大小和相應的Survivor區(qū)比例,設置此選項后,并行收集器會自動選擇年輕代區(qū)大小和相應的
Survivor區(qū)比例,以達到目標系統(tǒng)規(guī)定的最低相應時間或者收集頻率等,此值建議使用并行收集器時,一直打開.
-XX:GCTimeRatio: 設置垃圾回收時間占程序運行時間的百分比,公式為1/(1+n)
-XX:+ScavengeBeforeFullGC: Full GC前調用YGC,默認為true
CMS相關參數(shù):
-XX:+UseConcMarkSweepGC: 使用CMS內存收集
-XX:+AggressiveHeap:
-XX:CMSFullGCsBeforeCompaction: 多少次后進行內存壓縮,由于并發(fā)收集器不對內存空間進行壓縮,整理,所以運行一段時間以后會產生"碎片",
使得運行效率降低.此值設置運行多少次GC以后對內存空間進行壓縮,整理.
-XX:+CMSParallelRemarkEnabled: 降低標記停頓
-XX:+UseCMSCompactAtFullCollection: 在FULL GC時候,對年老代的壓縮,CMS是不會移動內存的, 因此, 這個非常容易產生碎片, 導致內存
不夠用,因此,內存的壓縮這個時候就會被啟用.增加這個參數(shù)是個好習慣.可能會影響性能,但是可以消除碎片
-XX:+UseCMSInitiatingOccupancyOnly: 使用手動定義初始化定義開始CMS收集,禁止hostspot自行觸發(fā)CMS GC
-XX:CMSInitiatingOccupancyFraction=70: 使用cms作為垃圾回收,使用70%后開始CMS收集,默認是92
-XX:CMSInitiatingPermOccupancyFraction: 設置Perm Gen使用到達多少比率時觸發(fā),默認是92
-XX:+CMSIncrementalMode: 設置為增量模式,用于單CPU情況
-XX:+CMSClassUnloadingEnabled:
輔助信息:
-XX:+PrintGC:
-XX:+PrintGCDetails:
-XX:+PrintGCTimeStamps:
-XX:+PrintGC:PrintGCTimeStamps:
-XX:+PrintGCApplicationStoppedTime: 打印垃圾回收期間程序暫停的時間.可與上面混合使用
-XX:+PrintGCApplicationConcurrentTime: 打印每次垃圾回收前,程序未中斷的執(zhí)行時間.可與上面混合使用
-XX:+PrintHeapAtGC: 打印GC前后的詳細堆棧信息
-Xloggc:filename: 把相關日志信息記錄到文件以便分析.
-XX:+PrintClassHistogram:
-XX:+PrintTLAB: 查看TLAB空間的使用情況
XX:+PrintTenuringDistribution: 查看每次minor GC后新的存活周期的閾值
-verbose:gc和-XX:+PrintGC是一樣的
-Duser.timezone: 設置用戶所在時區(qū)
-Djava.awt.headless=true: 開啟headless模式,可針對特殊情況的一些數(shù)據(jù)圖片的處理顯示等
標準輸入 0 從鍵盤獲得輸入(默認)
標準輸出 1 輸出到屏幕(即控制臺)
錯誤輸出 2 輸出到屏幕(即控制臺)
一般執(zhí)行shell命令,都默認是從鍵盤獲得輸入,并且將結果輸出到控制臺上.但是我們可以通過更改文件描述符默認的指向,從而實現(xiàn)輸入輸出的
重定向.比如將1指向文件,那么標準的輸出就會輸出到文件中.
輸出重定向:
command > filename 把標準輸出重定向到新文件中
command 1> filename 同上
command >> filename 把標準輸出追加到文件中
command 1>> filename 同上
command 2> filename 把錯誤輸出重定向到新文件中
command 2>> filename 把標準輸出追加到文件中
使用>重定向時,如果文件存在,則先刪除舊文件,再新建文件;>>則直接添加到原文件中
輸入重定向:
command < filename 以filename文件作為標準輸入
command 0<filename 同上
command <<delimiter 從標準輸入中讀入,直到遇到delimiter分隔符
高級用法:
重定向綁定:
1.>/dev/null
這條命令的作用是將標準輸出1重定向到/dev/null中./dev/null代表linux的空設備文件,所有往這個文件寫入的內容都會丟失,
那么執(zhí)行了>/dev/null之后,標準輸出就會不再存在,沒有任何能夠找出輸出的內容
2.2>&1
采用&可以將兩個輸出綁定到一起.就是將錯誤輸出和標準輸出輸出到同一個地方.
3.>/dev/null 2>&1
就是將標準輸出重定向到空設備文件(丟棄標準輸出),錯誤輸出綁定到標準輸出中了,所以錯誤輸出也被丟棄了,既不會輸出到
屏幕,也不會輸出到文件中
4.>/dev/null 2>&1 和 2>&1 >/dev/null
linux從左到右執(zhí)行,所有2>&1 >/dev/null 的執(zhí)行為:
1)2>&1,錯誤輸出綁定到標準輸出中,此時標準輸出是默認值,即輸出到屏幕上,所以錯誤輸出到屏幕上了
2)>/dev/null,將標準輸出1重定向到/dev/null中,標準輸出被丟棄
5.為什么要綁定2>&1呢?不使用2>out 1>out重復輸出兩次?
重復輸出兩次,標準輸出和錯誤輸出會搶占out文件的管道,可能導致信息寫入的錯誤,而且out文件被打開兩次,影響IO性能
nohup java -jar xxxx.jar >/dev/null 2>&1 &
不讓一些執(zhí)行信息輸出到控制臺
nohup java -jar -server -Xms512M -Xmx512M -Xss256k -XX:NewSize=128M -XX:MaxNewSize=128M
-XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=8 -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintGCDetails
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:gcc.log -Duser.timezone=Asia/Shanghai
-Djava.awt.headless=true xxx.jar >/dev/null 2>&1 &
性能排查:https://blog.csdn.net/java_wxid/article/details/107005583
測試url是否可用:curl -i "url"