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