專案裡有這樣的要求,使用者通過瀏覽器配製一部分資訊,這部分資訊不存在資料庫而存在linux下磁碟檔案中。對我來說倒是沒有什麼區別,不就是資料嘛,怎麼存不用我管,我只要能塞進去取出來就可以了。然而在執行的時候出現了兩個問題
1.中文資訊出現了亂碼
2.file too many open
一、分析:
1.出現亂碼就只能是編碼的問題了,有可能有兩種情況,一種是編碼不一致,另一種是不支援設定的編碼,因為我在專案裡面都是用utf8的編碼,所以不存在設定了不支援的編碼的問題,因此推斷出是系統編碼引起的。linux 下輸入export |grep lang 結果是en 果然如此。
二、初步解決方式:
1.runtime 系統命令 ulimit -n 8196
2.runtime 系統命令 export lang="en_us.utf-8"
本來以為解決了,但是問題依然存在為什麼呢?程式裡面設定完之後馬上又查詢了一遍,竟然沒有設定上?奇怪?沒出現問題呀,問了下公司搞linux開發的同事原來這些是程序相關的,我也沒有啟動新的程序呀,哦,一定是runtime.getruntime().exec() 它啟動了乙個新的程序。查資料如下:
在單獨的程序中執行指定命令和變數。(jdk api 1.6.0 中文版exec()方法說明)
看樣子在程式中解決問題是不現實了,那麼只能修改配置檔案了。修改那個檔案了,google下看看,哇,修改好多檔案都可以呀,為什麼修改這多種類檔案的方法都有呢?既然他們都寫出來了說明都曾經解決過相應的問題。那麼到底哪個才能適合我目前的問題呢?沒有思路繼續找資料,知道看到一篇關於linux 讀取配置檔案的順序的文章才明白。
下面是的部分拷貝:
執行順序為:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
關於各個檔案的作用域,在網上找到了以下說明:
(1)/etc/profile: 此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行. 並從/etc/profile.d目錄的配置檔案中蒐集shell的設定。
(2)/etc/bashrc: 為每乙個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取。
(3)~/.bash_profile: 每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案。
(4)~/.bashrc: 該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。
(5)~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案. 另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承/etc /profile中的變數,他們是"父子"關係。
(6)~/.bash_profile 是互動式、login 方式進入 bash 執行的~/.bashrc 是互動式 non-login 方式進入 bash 執行的通常二者設定大致相同,所以通常前者會呼叫後者。
三、最終解決方案:
根據執行的順序我們從後面往前面查詢,發現有設定lang 和ulimit 的地方改過來就可以了,如果沒有就在配檔案中新增乙個,我是在 ~/.bash_profile 中更改的
ulimit -n 8196
export lang="en_us.utf-8"
有人說在 /etc/sysconfig/i18n 裡面更改編碼方式,當然這樣也可以,只是需要注意一點的是,不要被後面讀取的配置檔案的同樣的屬性把我們自己的設定的變數給覆蓋了就好了。這也是為什麼網上有那麼多解決方法的原因了。
Linux系統預設編碼設定
源自 http www.xgstudy.com article 30 article22420 1.htm 修改 etc sysconfig language檔案,將rc lang,rc lc all設定為zh cn.gb2312,同時將root uses lang設定為 yes 一。linux系統...
linux下編碼格式設定
mysql 1.找到mysql的配置檔案,拷貝到etc目錄下,第一步很重要 把 usr share doc mysql server 5.1.52 my large.cnf 複製到 etc my.cnf 即用命令 cp usr share doc mysql server 5.1.52 my lar...
Linux 之 設定編碼格式
windows的預設編碼為gbk,linux的預設編碼為utf 8,所以在windows下編輯的中文檔案,在linux下顯示時會亂碼,這就需要進行編碼格式的設定 環境變數lang language縮寫 儲存著系統當前的編碼格式,可以輸出它來看一下 echo lang 通過修改環境變數 lang 來設...