當前訪問本站: hits

          yjhmily

          堅持走自己的路……

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks

          2010年8月10日 #

          原文出處:http://space.itpub.net/133735/viewspace-710117 
          總結的不錯!
          -------------------------------------------------------------------------------------------------
          生產環境最佳實踐
          1.linux 系統:
          1】關閉文件系統/分區的atime 選項
          Vi /etc/fstab
          在對應的分區項后面添加noatime ,nodiratime
          LABEL=/1 / ext3 defaults 1 1
          LABEL=/data1 /data ext4 defaults,noatime,nodiratime 1 2
          2】設置文件句柄4k+,目前該配置已經集成到啟動腳本中。
          Vi /etc/security/limit.conf
          * soft nproc 65536
          * hard nproc 65536
          * soft nofile 65536
          * hard nofile 65536
          3】不要使用large vm page (不要使用大內存頁選項)
          Linux 大內存頁參考:http://linuxgazette.net/155/krishnakumar.html
          4】用dmesg 查看主機的信息。
          2.linux 文件系統的選擇:
          Mongodb 采用預分配的大文件來存儲數據,我們推薦
          1】ext4
          2】xfs
          3.內核版本:
          網絡上對2.6.33-31 以及2.6.32 的表現持懷疑度, 而強力推薦2.6.36
          4.線程堆棧的尺寸
          默認的線程堆棧尺寸為10m ,調整為1m ,已經集成在啟動腳本中。
          項目過程中的總結與建議
          1.大小寫問題
          mongodb 是默認區分大小寫的,但是這會不會衍生出跟mysql 一樣的問題?(mysql 區
          分大小寫,導致windows 與linux 下的表名,字段名不一致)。
          如果無特別用途,建議表名,字段名全部用小寫字母。
          2.盡可能的縮短字段名的長度
          mongodb 的schema free 導致了每筆數據都要存儲他的key 以及屬性,這導致了這些數
          據的大量冗余。開發同事也許考慮到,從易讀性出發設計的key 基本比較長,基本都是按
          照起字面意思去設計的。這導致key 很長。對應的數據存儲占用了很大的空間。
          必要的時候,可以考慮建立一個key 與實際意義的map 表,盡量降低key 的長度。
          示例定義:
          // 基本信息
          static final String _ID = "_id";
          static final String STATUS_CODE = "sc";
          // 緩沖
          static final String DATE = "date";
          static final String MAX_AGE = "age";
          // 內容
          static final String CONTENT = "content";
          static final String CONTENT_TYPE = "ctype";
          static final String CONTENT_LENGTH = "clen";
          static final String ZIP = "zip";
          3. mongodb 單表最大索引數為64
          無索引排序的最大數據量為4M, 超過則報錯退出。
          建議where 條件盡量落在索引字段上,排序字段需要建立索引,索引的使用原則與oracle
          mysql 一致,盡量降低索引數量,索引長度。
          mongodb 的查詢每次只能用到一個索引,對數據的查詢不會“并發”執行
          例如: db.tab.find({'id'=1,'name'=2}) 如果‘id’,‘name' 列上分別有索引
          對查詢效率提升意義不大,如果索引為('id','name') 則大幅提升效率。
          4.mongodb 添加字段
          如果添加字段且帶有default 值,需要全部數據都要修改,這也是設計階段需要考慮的
          事情,這個問題的另外一種解法是應用代碼里做一次判斷。
          5.測試過程的密碼問題
          對于用作數據庫使用的Mongodb,在代碼測試階段都應加上密碼驗證,目前上線階段基
          本都會在密碼驗證方面出現問題(做緩存使用的可以不做密碼驗證)。
          6.數據源連接方式
          使用連接池模式,盡量減少認證帶來的性能額外消耗
          建議采用標準的uri 連接方式: mongodb://user:passwd@host:port,host:port/db
          7.Mongodb日志量
          正常情況下不需要開啟-v 日志選項。
          Mongodb 的-v 日志適合在開發環境的調試線上部署不建議采用這個參數,目前線上
          部署的情況,-v 日志一天也會有幾個G 的日志量,去掉這個參數,跟數據查詢相關的操作
          就不會記日志了,數據庫的內部的重要操作還是會寫日志的。
          8.連接數大小的設置
          Mongodb 驅動程序采用的連接池的方式連接到數據庫,目前從觀察到的情況是應用一
          開啟便根據變量的設置,建立全部連接,然后提供給程序使用,并且一旦其中某個連接
          到數據庫的訪問失敗,則會清空整個連接池到這臺數據庫的連接,并重新建立連接。
          而mongodb 對中斷連接的垃圾清理工作則是懶惰的被動清理方式,如果驅動程序端配
          置的連接數過大,一旦發生重連,則會導致mongo 端堆積大量的垃圾連接數據,導致
          主機資源耗盡。
          建議: mongodb 驅動的連接池大小的設置一般應該控制100 以下,一般情況30-50 足
          夠支撐應用訪問。
          9.鎖的問題
          Mongodb 對數據庫的訪問全部加鎖,如果是查詢請求則設置共享鎖,數據修改請求,
          則設置全局排他鎖,并且是實例級別的排他鎖。并且寫鎖會阻塞讀請求,如果長時間持有
          寫鎖,會阻塞整個實例的讀請求。
          部署建議:
          1】一般情況下,建議不同的應用不要合用一套示例。
          2】如果資源不滿足,需要合用,應該具有相同屬性的應用合用一套實例。
          例如合同mongo 的應用都是讀多寫少,防止一臺寫多應用阻塞讀請求。
          10.關于map/reduce問題
          mongodb 對map/reduce 的支持是單線程的,我們不建議在前臺使用該功能, group by
          是通過map/reduce 實現的,開發過程中,要慎用。
          11.安全問題
          1】Mongodb 運行在mongodb 用戶之上,并禁止mongodb 用戶登錄
          2】使用Mongodb 自帶的認證方法(adduser、auth)限制用戶訪問行為
          3】將Mongodb 置于內網環境中
          4】Mongodb 必須暴露在外網環境中的時候,使用IPTABLES 等網絡層技術進行防護
          5】網絡層面內容為明文傳輸,可以考慮存儲加密文檔,應用端,加解密。
          12.性能監控
          Mongodb 自帶有性能數據收集系統
          Mongostat 實時采集數據庫的多項指標,提供http console 端口號為應用端口號+1000。
          關注的主要性能指標:
          1】Faults:顯示Mongodb 每秒頁面故障的數量,這個是mongoDB 映射到虛擬地址空間,
          而不是物理內存,這個值如果飆高的話,可能意味著機器沒有足夠的內存來
          存儲數據和索引。
          2】Flushes:每秒做了多少次fsync,顯示多少次數據被刷新進了磁盤
          3】locked:寫鎖
          4】idx miss:索引未命中比例
          5】qr | qw:讀寫鎖的請求隊列長度。
          6】conn: 當前已經建立的連接數。
          其他命令:
          Db.stat()
          db.serverStatuse()
          Db.collection.stats()
          13.碎片問題
          Mongodb 數據庫如果數據修改很頻繁,會出現比較嚴重的空間碎片問題,表現在磁盤
          文件擴張與實際數據量不相符,內存不夠用,索引命中率低,查詢效率降低。
          碎片整理,目前我們采用的版本沒有太有效的方法。
          可以用db.repaireDatabase() 來整理數據庫,這個過程非常的慢
          如果是Master-slave 模式則相當于執行一次主從切換,然后從新建立從庫。
          如果是replSet 架構可以停掉數據庫,然后刪除數據目錄,從新從復制復制組中全同步數據,
          這個時候要考慮oplog 的尺寸。
          一個大體的步驟:
          1.】先調用rs.freeze(1200),將每個不想讓它成為primary 的機器讓它在1200 秒內無法成為
          primary(這步也可以不做)
          2. 】將primary stepDown,不出意外新的primary 會起來.
          3. 】將原primary kill 掉.
          4. 】刪掉所有data 數據(調用repair 很慢,真不如干掉重新來)
          5. 】再重啟動原primary 的進程
          6. 】以此循環完成整個復制組的全部重建。
          14.系統備份:
          Mongodb 目前不支持在線備份,只能離線備份。
          我們采用的架構為replSet 和Master-slave .
          基于我們目前的架構以及數據一致性要求,我們沒有安排相關的備份系統。
          15.應用代碼中Mongodb連接問題
          在有些應用在使用Mongodb 過程中會存在以下兩個小問題:
          1. 在應用啟動過程中,應用存在要求連接池中所有的連接都建立成功才讓應用正
          常啟動,這種做法不可取,因為存在網絡問題、Mongodb 拒絕連接或Mongodb 假死情況,如
          果沒加外部try catch 做防護,則Resin 不斷重啟也不能正常啟動端口。
          2.有些應用在使用Mongodb 中連接池配置了safe=true,w=1;這種配置意味著客戶端在
          插入數據或更新數據的時候,要求mongodb 必須將所更新的數據寫入磁盤并返回更新成功
          的信息給程序。如果碰上應用程序訪問壓力大,mongodb 就會反應遲鈍,并會發生假死可能,
          針對此情況,需要評估數據的一致性需求,做出合適調整。我們一般建議關閉此選項。
          16.補充開發方面的一些問題
          1】skip+limit翻頁,越往后面越慢,有資料說用數組元素的分頁可以解決,目前還沒
          試過,比較靠譜的做法是,先找出上次的id,翻頁的時候不用skip:
          last_row_id = ObjectId(‘....’);
          db.activity_stream->find({_id:{$lt: last_row_id },
          user_id:20 } ).sort( {_id:-1} ).limit(10);
          2】.只有真正需要的字段才select出來
          3】.更新的某條數據的時候,先查出來再更新會減小鎖的時間
          4】.只有返回很少結果的查詢才用索引,否則會加載太多數據,比沒有用索引還慢
          5】.屬性比較多的時候,建立分層的關系能夠提高查詢效率,否則每個記錄都要過一遍
          才能找到要的屬性
          17.關于硬件資源的選擇:
          虛擬機可以很好的隔離資源,并可動態的擴展。
          我們建議mongodb 的部署采用虛擬機的方式,每個虛擬機部署一個實例,使各節點分
          散在不同的物理機上,根據應用的前期預測,平衡虛擬機的之間的i/o。
          posted @ 2012-09-29 22:17 kangxm 閱讀(652) | 評論 (0)編輯 收藏

          adb shell

          # mount -oremount,rw /dev/block/mtdblock3 /system

          # pm list packages -f (列出apk和包名的對應關系)
          # cd /system/app (APK文件所在地)
          # rm Mms.* (rom自帶的短信)
          # exit

           

          adb uninstall com.android.mms

           

          返回Success,就說明卸載成功了

           

          注意..
          刪除之前, 最好用

          1. adb pull /system/app/xxx.apk .

          復制代碼

          給備份一下, 避免出錯(系統老是Force Close, 沒法用).
          出錯后, 可以用

          1. adb push xxx.apk /system/app
          adb shell

          # mount -oremount,rw /dev/block/mtdblock3 /system

          # pm list packages -f (列出apk和包名的對應關系)
          # cd /system/app (APK文件所在地)
          # rm Mms.* (rom自帶的短信)
          # exit

           

          adb uninstall com.android.mms

           

          返回Success,就說明卸載成功了

           

          注意..
          刪除之前, 最好用

          1. adb pull /system/app/xxx.apk .

          復制代碼

          給備份一下, 避免出錯(系統老是Force Close, 沒法用).
          出錯后, 可以用

          1. adb push xxx.apk /system/app
          posted @ 2012-08-10 17:56 kangxm 閱讀(550) | 評論 (0)編輯 收藏

          最近的機器內存又爆滿了,出了新增機器內存外,還應該好好review一下我們的代碼,有很多代碼編寫過于隨意化,這些不好的習慣或對程序語言的不了解是應該好好打壓打壓了。
          下面是參考網絡資源和總結一些在java編程中盡可能做到的一些地方
          -
          1.盡量在合適的場合使用單例
          使用單例可以減輕加載的負擔,縮短加載的時間,提高加載的效率,但并不是所有地方都適用于單例,簡單來說,單例主要適用于以下三個方面
          第一,控制資源的使用,通過線程同步來控制資源的并發訪問
          第二,控制實例的產生,以達到節約資源的目的
          第三,控制數據共享,在不建立直接關聯的條件下,讓多個不相關的進程或線程之間實現通信
          -
          2.盡量避免隨意使用靜態變量
          要知道,當某個對象被定義為stataic變量所引用,那么gc通常是不會回收這個對象所占有的內存,如
          public class A{
          static B b = new B();
          }
          此時靜態變量b的生命周期與A類同步,如果A類不會卸載,那么b對象會常駐內存,直到程序終止。
          -
          3.盡量避免過多過常的創建java對象
          盡量避免在經常調用的方法,循環中new對象,由于系統不僅要花費時間來創建對象,而且還要花時間對這些對象進行垃圾回收和處理,在我們可以控制的范圍內,最
          大限度的重用對象,最好能用基本的數據類型或數組來替代對象。
          -
          4.盡量使用final修飾符
          帶 有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指 定final防止了使用者覆蓋length()方法。另外,如果一個類是final的,則該類所有方法都是final的。java編譯器會尋找機會內聯 (inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。
          -
          5.盡量使用局部變量
          調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態變量,實例變量等,都在堆(Heap)中創建,速度較慢。
          -
          6.盡量處理好包裝類型和基本類型兩者的使用場所
          雖然包裝類型和基本類型在使用過程中是可以相互轉換,但它們兩者所產生的內存區域是完全不同的,基本類型數據產生和處理都在棧中處理,包裝類型是對象,是在堆中產生實例。
          在集合類對象,有對象方面需要的處理適用包裝類型,其他的處理提倡使用基本類型。
          -
          7.慎用synchronized,盡量減小synchronize的方法
          都 知道,實現同步是要很大的系統開銷作為代價的,甚至可能造成死鎖,所以盡量避免無謂的同步控制。synchronize方法被調用時,直接會把當前對象鎖 了,在方法執行完之前其他線程無法調用當前對象的其他方法。所以synchronize的方法盡量小,并且應盡量使用方法同步代替代碼塊同步。
          -
          8.盡量使用StringBuilder和StringBuffer進行字符串連接
          這個就不多講了
          -
          9.盡量不要使用finalize方法
          實際上,將資源清理放在finalize方法中完成是非常不好的選擇,由于GC的工作量很大,尤其是回收Young代內存時,大都會引起應用程序暫停,所以再選擇使用finalize方法進行資源清理,會導致GC負擔更大,程序運行效率更差。
          -
          10.盡量使用基本數據類型代替對象
          String str = "hello";
          上面這種方式會創建一個“hello”字符串,而且JVM的字符緩存池還會緩存這個字符串;
          String str = new String("hello");
          此時程序除創建字符串外,str所引用的String對象底層還包含一個char[]數組,這個char[]數組依次存放了h,e,l,l,o
          -
          11.單線程應盡量使用HashMap, ArrayList
          HashTable,Vector等使用了同步機制,降低了性能。
          -
          12.盡量合理的創建HashMap
          當你要創建一個比較大的hashMap時,充分利用另一個構造函數
          public HashMap(int initialCapacity, float loadFactor)
          避 免HashMap多次進行了hash重構,擴容是一件很耗費性能的事,在默認中initialCapacity只有16,而loadFactor是 0.75,需要多大的容量,你最好能準確的估計你所需要的最佳大小,同樣的Hashtable,Vectors也是一樣的道理。
          -
          13.盡量減少對變量的重復計算
          for(int i=0;i<list.size();i++)
          應該改為
          for(int i=0,len=list.size();i<len;i++)
          并且在循環中應該避免使用復雜的表達式,在循環中,循環條件會被反復計算,如果不使用復雜表達式,而使循環條件值不變的話,程序將會運行的更快。 
          -
          14.盡量避免不必要的創建
          A a = new A();
          if(i==1){list.add(a);}
          應該改為
          if(i==1){
          A a = new A();
          list.add(a);}
          -
          15.盡量在finally塊中釋放資源
          程序中使用到的資源應當被釋放,以避免資源泄漏。這最好在finally塊中去做。不管程序執行的結果如何,finally塊總是會執行的,以確保資源的正確關閉。 
          -
          16.盡量使用移位來代替'a/b'的操作
          "/"是一個代價很高的操作,使用移位的操作將會更快和更有效
          int num = a / 4;
          int num = a / 8;
          應該改為
          int num = a >> 2;
          int num = a >> 3;
          但注意的是使用移位應添加注釋,因為移位操作不直觀,比較難理解
          -
          17.盡量使用移位來代替'a*b'的操作
          同樣的,對于'*'操作,使用移位的操作將會更快和更有效
          int num = a * 4;
          int num = a * 8;
          應該改為
          int num = a << 2;
          int num = a << 3;
          -
          18.盡量確定StringBuffer的容量
          StringBuffer 的構造器會創建一個默認大小(通常是16)的字符數組。在使用中,如果超出這個大小,就會重新分配內存,創建一個更大的數組,并將原先的數組復制過來,再 丟棄舊的數組。在大多數情況下,你可以在創建 StringBuffer的時候指定大小,這樣就避免了在容量不夠的時候自動增長,以提高性能。 
          如:StringBuffer buffer = new StringBuffer(1000);  
          -
          19.盡量早釋放無用對象的引用
          大部分時,方法局部引用變量所引用的對象 會隨著方法結束而變成垃圾,因此,大部分時候程序無需將局部,引用變量顯式設為null。
          例如:
          Public void test(){
          Object obj = new Object();
          ……
          Obj=null;
          }
          上面這個就沒必要了,隨著方法test()的執行完成,程序中obj引用變量的作用域就結束了。但是如果是改成下面:
          Public void test(){
          Object obj = new Object();
          ……
          Obj=null;
          //執行耗時,耗內存操作;或調用耗時,耗內存的方法
          ……
          }
          這時候就有必要將obj賦值為null,可以盡早的釋放對Object對象的引用。
          -
          20.盡量避免使用二維數組
          二維數據占用的內存空間比一維數組多得多,大概10倍以上。
          -
          21.盡量避免使用split
          除 非是必須的,否則應該避免使用split,split由于支持正則表達式,所以效率比較低,如果是頻繁的幾十,幾百萬的調用將會耗費大量資源,如果確實需 要頻繁的調用split,可以考慮使用apache的StringUtils.split(string,char),頻繁split的可以緩存結果。
          -
          22.ArrayList & LinkedList
          一 個是線性表,一個是鏈表,一句話,隨機查詢盡量使用ArrayList,ArrayList優于LinkedList,LinkedList還要移動指 針,添加刪除的操作LinkedList優于ArrayList,ArrayList還要移動數據,不過這是理論性分析,事實未必如此,重要的是理解好2 者得數據結構,對癥下藥。
          -
          23.盡量使用System.arraycopy ()代替通過來循環復制數組
          System.arraycopy() 要比通過循環來復制數組快的多 
          -
          24.盡量緩存經常使用的對象
          盡可能將經常使用的對象進行緩存,可以使用數組,或HashMap的容器來進行緩存,但這種方式可能導致系統占用過多的緩存,性能下降,推薦可以使用一些第三方的開源工具,如EhCache,Oscache進行緩存,他們基本都實現了FIFO/FLU等緩存算法。
          -
          25.盡量避免非常大的內存分配
          有時候問題不是由當時的堆狀態造成的,而是因為分配失敗造成的。分配的內存塊都必須是連續的,而隨著堆越來越滿,找到較大的連續塊越來越困難。
          -
          26.慎用異常
          當 創建一個異常時,需要收集一個棧跟蹤(stack track),這個棧跟蹤用于描述異常是在何處創建的。構建這些棧跟蹤時需要為運行時棧做一份快照,正是這一部分開銷很大。當需要創建一個 Exception 時,JVM 不得不說:先別動,我想就您現在的樣子存一份快照,所以暫時停止入棧和出棧操作。棧跟蹤不只包含運行時棧中的一兩個元素,而是包含這個棧中的每一個元素。
          如 果您創建一個 Exception ,就得付出代價。好在捕獲異常開銷不大,因此可以使用 try-catch 將核心內容包起來。從技術上講,您甚至可以隨意地拋出異常,而不用花費很大的代價。招致性能損失的并不是 throw 操作——盡管在沒有預先創建異常的情況下就拋出異常是有點不尋常。真正要花代價的是創建異常。幸運的是,好的編程習慣已教會我們,不應該不管三七二十一就 拋出異常。異常是為異常的情況而設計的,使用時也應該牢記這一原則。

          文章主要是為了拋磚引玉,希望有更多牛人的指點

          謝謝的 xuanyuan 的建議:
          ===================================================
          7.慎用synchronized,盡量減小synchronize的方法
          re:同意,不過文中有個地方說錯了,使用synchronized關鍵字并不一定都是鎖定當前對象的,要看具體的鎖是什么。如果是在方法上加的synchronized,則是以對象本身為鎖的,如果是靜態方法則鎖的粒度是類。
          ---------------
          9.盡量不要使用finalize方法
          re:同意,其實不推薦用finalize方法的根本原因在于,JVM的規范并不保證何時執行該方法,所以用這個方法來釋放資源很不合適,有可能造成長時間資源得不到釋放。
          ---------------
          16.盡量使用移位來代替'a/b'的操作;17.盡量使用移位來代替'a*b'的操作
          re:個人不太同意這兩條。這樣做確實有更好的性能,但是卻犧牲了可讀性。這兩個操作符對很多程序員來說并不直觀。我認為在如今硬件價格不那么昂貴的情況下,略微犧牲一些性能,換來更好的可讀性和可維護性是好的選擇。
          ===================================================
          19.盡量早釋放無用對象的引用
          大部分時,方法局部引用變量所引用的對象 會隨著方法結束而變成垃圾,因此,大部分時候程序無需將局部,引用變量顯式設為null。
          例如:
          Public void test(){
          Object obj = new Object();
          ……
          Obj=null;
          }
          上面這個就沒必要了,隨著方法test()的執行完成,程序中obj引用變量的作用域就結束了。但是如果是改成下面:
          Public void test(){
          Object obj = new Object();
          ……
          Obj=null;
          //執行耗時,耗內存操作;或調用耗時,耗內存的方法
          ……
          }
          如果Object obj = new Object(); 如果這對象并不是大對象,這有必要嗎?Obj=null;只是告訴jvm這個對象已經成為垃圾,至于什么時候回收,還不能確定! 這可讀性也不好!
          ===================================================
          posted @ 2011-08-22 15:18 kangxm 閱讀(573) | 評論 (0)編輯 收藏

          提示/boot目錄空間不足,查了一些資料,最后把久的內核給卸載得以解決。

          1.首先查看自己使用的內核

          lxz@lxz-pc:~$ uname -a

          Linux lxz-pc 2.6.35-25-generic #44-Ubuntu SMP Fri Jan 21 17:40:48 UTC 2011 i686 GNU/Linux


          2.然后查看自己boot目錄,選擇需要卸載的版本
          lxz@lxz-pc:~$    cd /boot
          lxz@lxz-pc:/boot$  ls -l
          總計 35125
          -rw-r--r-- 1 root root   705861 2011-01-22 06:04 abi-2.6.35-25-generic
          -rw-r--r-- 1 root root   709370 2011-03-01 23:56 abi-2.6.35-28-generic-pae
          -rw-r--r-- 1 root root   128615 2011-01-22 06:04 config-2.6.35-25-generic
          -rw-r--r-- 1 root root   129056 2011-03-01 23:56 config-2.6.35-28-generic-pae
          drwxr-xr-x 3 root root     7168 2011-03-23 10:31 grub
          -rw-r--r-- 1 root root 10761551 2011-03-04 10:49 initrd.img-2.6.35-25-generic
          -rw-r--r-- 1 root root 10741569 2011-03-23 10:18 initrd.img-2.6.35-28-generic-pae
          drwx------ 2 root root    12288 2011-01-05 04:52 lost+found
          -rw-r--r-- 1 root root   165084 2010-09-25 01:14 memtest86+.bin
          -rw-r--r-- 1 root root   167264 2010-09-25 01:14 memtest86+_multiboot.bin
          -rw-r--r-- 1 root root  1831296 2011-01-22 06:04 System.map-2.6.35-25-generic
          -rw-r--r-- 1 root root  1873873 2011-03-01 23:56 System.map-2.6.35-28-generic-pae
          -rw-r--r-- 1 root root     1192 2011-01-22 06:06 vmcoreinfo-2.6.35-25-generic
          -rw-r--r-- 1 root root     1196 2011-03-01 23:57 vmcoreinfo-2.6.35-28-generic-pae
          -rw-r--r-- 1 root root  4294672 2011-01-22 06:04 vmlinuz-2.6.35-25-generic
          -rw-r--r-- 1 root root  4428048 2011-03-01 23:56 vmlinuz-2.6.35-28-generic-pae
          上面顯示的情況中,是我已經把linux-image-2.6.35-27-generic的結果

          3.卸載舊內核應該使用命令:
          lxz@lxz-pc:/boot$  sudo apt-get remove linux-image-2.6.35-27-generic

          4.查看/boot目錄:
          lxz@lxz-pc:/boot$ sudo du -m /boot           //以MB為單位顯示
          1    /boot/grub/locale
          2    /boot/grub
          1    /boot/lost+found
          36    /boot

          5.查看文件系統使用情況,和文件系統被掛在的位置:
          lxz@lxz-pc:/boot$  df  -lh
          文件系統            容量  已用  可用 已用%% 掛載點
          /dev/sda7              71G  7.7G   60G  12% /
          none                 1001M  244K 1001M   1% /dev
          none                 1007M  216K 1006M   1% /dev/shm
          none                 1007M  100K 1006M   1% /var/run
          none                 1007M     0 1007M   0% /var/lock
          /dev/sda8              92M   42M   46M  48% /boot
          posted @ 2011-04-06 12:09 kangxm 閱讀(3202) | 評論 (0)編輯 收藏

          在ubuntu環境下進行android開發,想把目標設備定為真實的手機。

          前幾天剛買了個defy就試了下,結果打開手機usb調試模式連接到電腦后,在eclipse里面手機名字顯示為一堆???號,且無法使用。

          需要以下的步驟才能連接到:

          1 把手機設備為usb調試模式并和電腦連接

          2 打開終端運行

              lsusb


              屏幕上會有一行顯示類似

              Bus 002 Device 012: ID 22b8 :xxxx Motorola xxxxxxxxxxxx

              這就是你的android手機了

          3 然后在終端運行

             sudo gedit /etc/udev/rules.d/50-android.rules

             并編輯其中加入行: SUBSYSTEM=="usb", SYSFS{"Motorola xxxxxxxxxxxx "}=="22b8 ", MODE="0666"

          4 接著運行

              sudo chmod a+rx /etc/udev/rules.d/50-android.rules

              sudo /etc/init.d/udev restart

          5 最后進入android sdk的tools目錄 platform-tools 運行

              sudo ./adb kill-server

              sudo ./adb devices

          試著重新打開eclipse,在運行參數里選則手動選取目標設備,這時在Device Chooser里面應該就可以看到正常顯示出名字的手機了。

          posted @ 2011-03-23 14:11 kangxm 閱讀(2085) | 評論 (2)編輯 收藏

          主站蜘蛛池模板: 乌拉特中旗| 封丘县| 民县| 合江县| 新安县| 晋江市| 鹿邑县| 偃师市| SHOW| 万载县| 夏河县| 黄冈市| 屯门区| 重庆市| 兴业县| 大宁县| 新泰市| 师宗县| 密云县| 伊金霍洛旗| 海南省| 靖远县| 叶城县| 五寨县| 莱州市| 玛纳斯县| 宜兰县| 康保县| 志丹县| 自治县| 囊谦县| 南部县| 曲水县| 柘荣县| 克东县| 德保县| 罗平县| 海宁市| 甘肃省| 景泰县| 潞城市|