哈嘍,大家好,我是小G。
大家有沒有碰到過這種情況??經(jīng)常為了復(fù)現(xiàn)某個偶現(xiàn)問題,在開始測試時就需要打開日志一直跟蹤日志到問題復(fù)現(xiàn),在這個過程中,可能會經(jīng)歷很長時間,導(dǎo)致抓取到的日志文件一般都比較大,導(dǎo)致在分析日志時分析日志的工具load日志很慢,可能還會占用內(nèi)存過多,導(dǎo)致辦公系統(tǒng)運(yùn)行變慢、變得比較卡頓。
如果碰到這種情況一般有兩種處理方法:
1、優(yōu)化log系統(tǒng),針對保存日志的文件大小設(shè)置一個固定的size,每當(dāng)日志保存超過這個size之后,就重新保存日志到另外一個文件,以此類推,最后分析問題的時候面對就是一個個固定size大小的日志文件,避免出現(xiàn)較大size的日志文件導(dǎo)致load慢或卡頓的問題。
2、依然采用持續(xù)性記錄日志,全部保存在一個文件內(nèi),但分析問題前,根據(jù)日志大小,時間情況等,對日志文件大小進(jìn)行手動分割處理。
當(dāng)然對于log分析而言,第一種方法顯然會更友好,避免了人為手動參與,會更高效。實(shí)際中我們可能兩種方法會混合使用,提高效率。
今天主要學(xué)習(xí)的是第二種方法中涉及到的一個 Linux 命令?:?split 。另外也是因?yàn)樽罱?jīng)常在使用systrace的場景用到比較多,所以記錄一下,詳細(xì)如下。
使用systrace為什么會用到這個命令?
有時為了分析難復(fù)現(xiàn)或者復(fù)雜的問題,需要抓取盡可能多的事件的 systrace,而最后抓取到的這些 systrace 的總大小可能很大,而我本地電腦在本地一直持續(xù)在用,可能半個月都沒關(guān)機(jī)過了,內(nèi)存已經(jīng)吃緊,瀏覽器本身內(nèi)存也可能吃緊了,此時如果碰到一個systrace文件太大就會出現(xiàn)無法 load 解析了,所以就需要考慮將抓取到的 systrace 文件進(jìn)行分割,分段進(jìn)行解析。
此時 Linux split 這個命令就非常有用了。
split 命令可以將一個文件分割成數(shù)個。該指令將大文件分割成較小的文件,在默認(rèn)情況下將按照每1000行切割成一個小文件。通過命令參數(shù),可以指定按照行數(shù)或者字節(jié)數(shù)進(jìn)行分割。
用法:
split [--help][--version][-<行數(shù)>][-b <字節(jié)>][-C <字節(jié)>][-l <行數(shù)>][要切割的文件][輸出文件名]部分說明:
-l <行數(shù)> : 指定每多少行切成一個小文件
-b <字節(jié)> : 指定每多少字節(jié)切成一個小文件
-C<字節(jié)> : 與參數(shù)“-b”相似,但是在切 割時將盡量維持每行的完整性
[輸出文件名] : 設(shè)置切割后文件的前置文件名, split會自動在前置文件名后再加上編號
比如,我想以每 10 行分割文件 testfile:
$ split -l 10 testfile
再如,過大的?systrace?文件,以每?500000?行進(jìn)行分割:
split -l 500000 mytest.html
說明:
1、一般 systrace 文件,差不多每行大約 100Bytes 上下;
2、注意:切割systrace時候,需要主要針對切割之后文件,還需要做下處理,避免出現(xiàn)異常,導(dǎo)致無法解析。
由于 systrace 文件之前是完整的 html 語法規(guī)則編寫,分割之后意味著每個分割的小文件的末尾,語法則會出現(xiàn)不匹配情況,此時就需要我們進(jìn)行手動消除,可在切割后的systrace文件末尾添加如下內(nèi)容:
</script> <!-- END TRACE --> </body> </html>
然后,就可以和平時使用一樣,分段解析每一個小的systrace文件了。