今天在服務(wù)器部署nuxt項(xiàng)目時(shí) 執(zhí)行npm run build總是執(zhí)行到一半時(shí)出現(xiàn) Killed
后經(jīng)過查詢,說這個(gè)是因?yàn)閮?nèi)存不足導(dǎo)致的。解決的辦法就是設(shè)置交換分區(qū)或交換文件。
交換分區(qū)就不嘗試了,直接設(shè)置交換文件。一般按照交換區(qū)的大小是內(nèi)存的2-4倍,服務(wù)器的內(nèi)存是1G,所以設(shè)置2GB的交換文件大小。那么如果創(chuàng)建這么大的文件呢?網(wǎng)上都是提供的fallocate命令:
fallocate -l 2G /swapfile
結(jié)果提示:
fallocate: /swapfile: fallocate failed: Operation not supported
還說什么呢?運(yùn)氣背,沒辦法。好吧,那就用其他方式吧。后來找到了:truncate -s 2G swapfile
然后,在設(shè)置交換文件后,啟動(dòng)交換文件的時(shí)候,提示:
swapon: /swapfile: skipping - it appears to have holes.
對,你沒看錯(cuò),你的文件有很多洞洞,好搞笑。
再換一種:
或
dd if=/dev/zero of=/swapfile bs=4096 count=512k
不要把if=/dev/zero去掉,似乎有問題。這樣就成功創(chuàng)建了一個(gè)大文件,沒有洞洞了。
好了,下面就將設(shè)置swap交換文件的流程說一下,請?jiān)趓oot權(quán)限下操作,非root用戶,請使用root權(quán)限,在命令前加上sudo:
1.查看系統(tǒng)是否已經(jīng)設(shè)置了swap交換文件(交換分區(qū))
swapon -s
如果什么也沒有就退出了,表示沒有設(shè)置任何交換文件(分區(qū))。
2.查看內(nèi)存大小**
free -m
看到內(nèi)存大小,來確定交換文件的大小,建議值是內(nèi)存的2-4倍。當(dāng)然這只是建議值,你可以根據(jù)情況來選擇。
3.查看磁盤大小**
df -h
看看磁盤容量,來確定到底設(shè)置多大的交換文件比較好。
4.創(chuàng)建交換文件
你也可以創(chuàng)建一個(gè)交換分區(qū)。我們創(chuàng)建交換文件就好了。有的主機(jī)沒有辦法創(chuàng)建交換分區(qū)。相對于創(chuàng)建交換分區(qū)來講,創(chuàng)建交換文件是要容易很多了。
交換文件一般都很大,如何創(chuàng)建大文件的空文件呢?下面有可供選擇的命令:
命令1:
fallocate -l 2G /swapfile
2G是容量,/swapfile是文件名和所在的路徑,這里是在根目錄下創(chuàng)建這樣一個(gè)文件。但是有些系統(tǒng)就可能會(huì)失敗。如果失敗,就換下一個(gè)命令。
命令2:
truncate -s 2G /swapfile
參數(shù)基本相同。這個(gè)命名創(chuàng)建文件的速度很快,但是可能有問題。我遇到的就是在設(shè)置交換文件的時(shí)候提示文件有很多洞洞,也就是沒法使用。那就換下一個(gè)命令。
命令3:
dd if=/dev/zero of=/swapfile bs=4096 count=512k
這個(gè)命令就OK了。但是不要去掉 if=/dev/zero,不然還是會(huì)出問題的。of后面是文件的路徑和文件名,bs是文件塊大小,count是塊的數(shù)量。bs*count=文件大小。我測試過,bs沒有要求要對齊到扇區(qū)大小的512 字節(jié),但是建議對齊一下,也就是設(shè)置為512的整倍數(shù),以免一些系統(tǒng)又出問題。文件越大創(chuàng)建的速度越慢,但是只要最后可以,還是可以等的。創(chuàng)建完會(huì)有這樣的提示:
524288+0 records in
524288+0 records out
2147483648 bytes (2.1 GB) copied, 38.2492 s, 56.1 MB/s
文件名可以是其他的,不一定要是swapfile哦。
5.設(shè)置文件的權(quán)限
將文件的權(quán)限設(shè)置為``` 600```,因?yàn)樵谠O(shè)置交換文件時(shí)需要。下面是設(shè)置命令:
chmod 600 /swapfile
6.設(shè)置交換文件,將swapfile指定為交換文件
mkswap /swapfile
設(shè)置完后,提示:
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=9ab7410d-5c33-49f1-9f20-a192dc2e0088
7.啟動(dòng)交換文件
swapon /swapfile
8.查看交換文件設(shè)置情況
swapon -s
提示如下:
Filename Type Size Used Priority
/swapfile file 2097148 0 -1
9.再使用free確認(rèn)一遍
free
提示如下:
total used free shared buff/cache available
Mem: 1016516 432388 63392 184 520736 399700
Swap: 3146744 1189312 1957432
這樣,系統(tǒng)需要時(shí)就會(huì)使用它了。
10.如果不再需要了,可以關(guān)閉
swapoff /swapfile
關(guān)閉之后,再用
swapon -s
就不到交換文件信息了。
11.永久生效交換文件
上面設(shè)置的只是臨時(shí)使用的,重啟系統(tǒng)就沒有了。如要永久使用這個(gè)交換文件,就要寫到配置文件里。
配置文件是:/ect/fstab
我們用vi編輯這個(gè)文件:
vi /ect/fstab
進(jìn)入后,按i進(jìn)入編輯模式,然后在最后一行加入:
/swapfile swap swap sw 0 0
按Esc鍵退出編輯狀態(tài),然后輸入:wq,回車就可以退出了。
這樣就搞定了。
