OS: Fedora 20(Linux kernel 3.17.7 x86_64)
做了修改之後,Chrome就正常了,但這畢竟不是個正常的現象,檔案開啟數量超過1024,實在難以想像,還是希望能盡快改掉這個問題。
Chrome: 39.0.2171.95 (64-bit)
nVidia Driver: kmod-nvidia-304xx-3.17.7-200.fc20.x86_64-304.123-1.fc20.22.x86_64
問題: Chrome在開某些Javascript或是畫面上有很多廣告元件和圖檔時常會變成Chrome專有的哭臉貢面,必須關閉出問題的Tab後再重新開一個。當同時開多個Tab時更為明顯。
這個問題持續好一陣子了,一直沒有去深究到底是為什麼?抱著更新之後應該就會好了,在做了兩周的更新後,似乎都沒有改善。只好動手開始找問題,開始以為是我的Profile檔案有問題,就用老方法 - 把現在的Profile備份起來後(PS. Chrome的Profile檔案在/home/michaelr/.config/google-chrome 目錄下),刪掉再重新開啟Chrome,讓Chrome自己重新產生一份新的Profile。但似乎沒有效果,仍然會有Crash的哭哭臉頁面跑出來。
藉由在console中執行chrome來查看Chrome的顯示的錯誤訊息時,可以看到類似以下的錯誤訊息。
[WARNING:flash/platform/pepper/pep_module.cpp(63)] SANDBOXED
[WARNING:flash/platform/pepper/pep_viewclient.cpp(357)] Could not create display context.
[WARNING:flash/platform/pepper/pep_viewclient.cpp(357)] Could not create display context.
...
[12695:12733:1227/081954:ERROR:net_util_posix.cc(168)] getifaddrs: 開啟太多檔案
[WARNING:flash/platform/pepper/pep_viewclient.cpp(357)] Could not create display context.
...
[12695:12726:1227/081954:ERROR:host_shared_bitmap_manager.cc(144)] Cannot create shared memory buffer
[12695:12729:1227/082335:ERROR:channel.cc(290)] RawChannel read error (connection broken)
[12695:12729:1227/082428:ERROR:channel.cc(290)] RawChannel read error (connection broken)
[12695:12726:1227/083559:ERROR:host_shared_bitmap_manager.cc(144)] Cannot create shared memory buffer
[WARNING:flash/platform/pepper/pep_viewclient.cpp(357)] Could not create display context.
... |
只好請出谷哥大師用錯誤訊息查詢的結果,似乎是Chrome和nVidia驅動程式在Linux環境會出的BUG。
以LOG來看是Chrome在同時間開啟大量的檔案,導致超過系統允計的上限造成Chrome的頁面Crash。使用以下的指今可以看出現在系統允許每個USER能同時開啟的最大檔案數(Open files)是 1024,這是OS的自我保護機制。
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31647
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
可以先用指令的方式進行測試看看是不是真的是這個參數的影響(其實心裡已經認定是它了),因為這只是暫時性的修改而已。
# ulimit -Sn 4096
# ulimit -Hn 4096
先用指令把參數值設定到4096(一次加到四倍,如果還不夠也太扯了),接著再用指令執行Chrome
# google-chrome
|
在開了一些常會跳掉的頁面後發現,真的OK了耶!
接下來就是修改設定檔,讓每次開機後設定都會生效!在參考連結的最下方有網友提到怎麼修改設定檔,但那是給Ubuntu用的。在Fedora環境下的# /etc/security/limits.conf 檔案裡有說明設檔案要怎麼用和設定檔放在/etc/security/limits.d目錄下, 以下說明Fedora的修改方式:
1. 在/etc/security/limits.d/ 目錄下建一個92-nofile.conf 檔案,內容如下
* soft nofile 4096 |
2. 重新開機
開機完後再用指令查詢
# ulimit -a
就會看到最大檔案開啟數量變成 4096 了,因為這原本就是保護機制,所以沒有必要別開太大,不然就失去了效果。
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31647
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 4096
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
做了修改之後,Chrome就正常了,但這畢竟不是個正常的現象,檔案開啟數量超過1024,實在難以想像,還是希望能盡快改掉這個問題。