為何linux作為伺服器端十年不重啟都不卡而安卓用半年就十分卡?

linux內核向來以高效,佔用資源低而著稱。為何同樣使用linux內核的安卓會佔用資源會如此之多?


補充一點。

Linux作為伺服器運行十年不卡,那是運行有限的幾個服務,以確定的方式運行。

Android用半年卡,那是運行各種app,以隨意的方式運行。

那麼說Android如果也運行有限的幾個app,以確定的方式運行會怎麼樣呢?那你用用wp就知道了啊。


因為佔用資源的是app,不是內核。2017年沒有任何靠譜的操作系統是內核耗費大量資源的,全都是你們裝的程序在搞事。伺服器跟客戶端最大的區別在於軟體又靠譜又穩定。這就像我的Windows台式機,額外安裝的永遠只有Office、VisualStudio、瀏覽器、幾個聊天工具和一堆遊戲,再也沒有別的東西了,用好幾年不重裝也不會卡。你如果手機也能做到這一點,不要下載可以不下載的app,那你也可以用好多年不會卡。


這事真不能扯上系統,甚至扯上內核。

完全是因為軟體行為導致的!(不需要用半年,給我半個小時,我就能把最新的最高配置的Android搞到卡機)

----------

為什麼會卡?

我們很多情況下感受到的卡,是因為UI界面響應慢或者瞬時無響應。

究其原因,一方面是設備配置不足,另一方面(更重要的方面)是因為軟體寫的太差太糟糕!

----------

恰恰Android上真的是太多太多糟糕的軟體了,而且有些軟體你還不得不安裝!


一個被數十人的團隊,持續伺候著,還有一大批技術人員提供軟硬體支持的大傢伙,和一個隨時丟到某處,不用你太過關心的小傢伙,誰更穩定?

其實,任何一部,堅持不用國產全家桶+Google Play版的Facebook、Google Plus、Messenger等非國產應用+AOSP版Android+設置隱私保護(限制應用自啟、後台保持運行)+綠色守護

這樣的Android手機,你用1年,不關機、不重啟,也不會卡。

Linux伺服器呢?人家花那麼多錢,來買的應用程序,為的就是不「作妖」啊,要不然,那些開發企業應用的廠商,早該倒閉了。

當然,伺服器的運行環境也更加適宜,常年26℃的空調房,嚴苛的灰塵限制,都是保證機器7x24小時運行的基礎。

伺服器的後台,還有專人,或是程序,持續分析伺服器當前運行的硬體情況日誌。如果發現有隱患,運維人員可以在第一時間解決這些故障,以防宕機。

手機的使用環境就複雜多了,低溫(iPhone在東北的冬天,無故自動關機)、放在被窩裡,快速充電時的高溫,都會對整個系統的運行,產生影響。


伺服器沒有gui

伺服器沒有全家桶

伺服器要運行的東西已經開著,不會連帶喚醒

伺服器程序不用加固


1、連接任意linux伺服器

2、啟動bash

3、敲 :(){ :|: };:

4、回車

看看有哪台linux伺服器能不秒跪……

可見,伺服器內核只是一個方面,如果內核沒問題,那麼更重要的是你跑的那些程序們幹了什麼……


Linux命令行回車後5秒鐘出結果,你會覺得背後執行了複雜的運算,Linux真簡潔給力。

手機開個app,動畫卡卡頓頓,5秒後載入完,你會覺得什麼垃圾手機,卡的1b。

10年前伺服器裝個最新的桌面版Ubuntu,分分鐘卡到爆炸


瀉藥。

不要一聽說伺服器三個字就覺得很高端很複雜,全世界幾乎所有伺服器上的服務項目遠少於你的手機。

跑的服務越少,程序越簡單就越穩定。

不信你重置一下你的手機,開飛行模式,接上電源熄屏放本地mp3單曲循環。

二三十年不重啟也沒問題。


------我的微信,做點自己的小事------

微信號:shuangziruguoai

http://u.wechat.com/EDIypK2wxzThVluB-H8oVEM (二維碼自動識別)


首先推薦下樓上 @北極 的回答

其次本人不才,從另一個角度說下為什麼你會覺得android卡而linux伺服器不卡

一個根本的問題就是gui,對於gui程序(包括launcher本身),讓用戶覺得卡頓一般都是刷新率的問題

而linux伺服器一般不運行桌面,跑跑後台進程即可,即使你某個軟體很慢,但是最終都會完成,並且會把結果告訴你。你拿多核伺服器編譯android的rom和單核伺服器編譯android的rom時間差異天差地別,但是你仍然可以通過screen或者nohup來避免這個問題,轉而去做其他事情,這都是進程調度的功勞,這方面android也是一樣的。

唯一不同的是,android的主線程刷新周期是有限制的,保證用戶能夠流暢使用,android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染, 如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著程序的大多數操作都必須在16ms內完成。

這也是為什麼軟體需要優化的原因,就是為了能保證16ms把後台處理完畢,然後交給opengl去繪製ui。如果沒有完成,那麼就會丟幀,造成視覺上的卡頓。

有人僅僅說是軟體設計的不完善導致的android手機卡頓,這是不完全正確,甚至有偏見的。android本身有自己的內存管理機制,單個應用也有自己的內存使用上限,即使你代碼寫得稀爛,你也不用擔心你可以把整個os的流暢性破壞掉,畢竟再不濟,把你卸載掉就一了百了了。

最後給結論,android使用一定時間後卡頓的問題客觀存在,和軟體無關,和硬體有關


內核不是全部

android最重要的那些東西和linux無關的


有軟體原因,也有硬體原因:

1. 軟體原因:

我們安裝的應用軟體越來越多,而國產app經常不請自來在後台偷偷運行。這些高票的回答里都有。我要補充的是下面的硬體或者說是固件原因。

2. 硬體/固件原因:

這和手機的存儲介質——快閃記憶體關係很大。 數據表明,我們對手機存儲空間或SSD使用大於75%,寫入性能會因為寫放大而大大下降。

詳見:雜說快閃記憶體番外:手機為什麼越用越卡和快閃記憶體寫放大 - 知乎專欄


從硬體上,x86.吊著arm打。

還有,在線伺服器不會亂裝軟體。安卓手機上有多少辣雞軟體,能不坑嘛。


說得你好像見過十年不重啟的linux伺服器一樣,我估計你連linux怎麼用都不知道。不裝逼能死么?

十年前的服務如果還在服役,那時候內核是2.6.1x吧,安全補丁都打了幾百個了。沒必要為了不關機而硬挺著,有事沒事做個升級挺好的。


問這個問題,你肯定不是程序員。


當年,Symbian公司總部有台Symbian手機,經常運行各種程序,10年未重啟,依然絲般順滑——Warren Day同志講的,不知道是不是真的。但Symbian已經死了。


Android用半年覺得變卡之後,你用黑域之流的工具把所有安裝的app都限制一下,你就發現可以回到初始的流暢狀態。


說一下前面一些回答里的一些的錯誤吧:

安卓卡主要是存儲介質的原因,Flash存儲在用一段時間以後性能肯定會下降,我記得在哪看到的數據說兩年還是幾年性能下降50%還是多少來著,反正性能下降是很驚人的。所以就算安卓不裝什麼軟體,就只跑一些常規的東西,性能也會下降,蘋果也是,凡是用flash存儲的設備都有這種問題。

題主說半年可能有些誇張,但如果內置存儲容量越小,剩餘空間越小,老化的速度越快。

所以這個鍋不一定是軟體要背的。

伺服器就沒這個問題,伺服器用的機械硬碟不存在老化的問題,性能不高,但也不差,所以持續工作是很穩定的。

其實如果不裝軟體不聯網的話,PC的性能基本上沒啥變化,我上大學的時候家裡有一台老電腦,裝了Windows2000,沒聯網,家裡人就拿那個電腦看看碟片,打打字,玩點單機小遊戲之類的,使用一直很流暢。

補充一點,我不否認軟體會吃掉很多系統資源,尤其是軟體升級,但即使不升級軟體,手機一樣也會卡的要死,我家裡幾個老手機,已經不用了,所以不存在升級軟體的情況,上面有幾個單機遊戲,基本上處於沒辦法玩的狀態。


一是複雜圖形界面的問題,扯上這個就比較難。

再有運行相對單一服務的伺服器,和動輒開幾十個服務的安卓手機比,實際負荷並不大。

再有,在嵌入式圖形,桌面系統上,Java的應用性能歷來表現都不好,包括當年的J2ME。

所以行業移動設備這個領域到目前為止都沒被安卓系統侵蝕完。


由於使用場景的不同,實用的方法及細節也完全不同。

Linux 作為由全世界來維護的開源免費操作系統內核,使用場景非常廣泛。

對於伺服器與安卓手機的區別來看,硬體不同,軟體不同,使用方向不同。

首先硬體:

伺服器需要為多人服務,並且可能服務的人成千上萬,甚至更多,伺服器在性能的優化上與硬體配置都是非常極致的,伺服器上動輒幾百台的分散式,並配備負載均衡的技術,運行內存也是大的嚇人,可能對於大公司來說,運行內存都要16G起步,硬碟也是各種陣列,性能上從來就沒有縮水。

而 Android 操作系統更多的作為個人移動端設備的操作系統,由於體積與成本限制,配置不可能和高能的伺服器來比拼,由於可移動的需求,也必須為電池考慮到省電,所以性能相對於伺服器極其有限。

然後是軟體,

伺服器在軟體上也是需要極端優化的,內存和性能的管理也非常嚴格,軟體更不會做一些不需要做的事。

而 Android 手機就不一樣了,Android 為個人服務,當時為了討好開發者,為了降低軟體的開發難度,採用了java語言作為官方支持語言,java語言的性能本身就不及C語言之類的高效,但可能是為了便於開發,Android選擇了java,再就是一些需要手動安裝的軟體,相對於伺服器上經常會安裝的Apache,sql等程序是非常保守的,絕對不會多餘的佔用性能,而手機就不一樣了,各軟體廠商為了賺取流量已經不惜一切代價了,可能你手機上的「360」和「百度手機衛士」戰鬥的時候,他們做的事對於毫無用處,而伺服器是絕對不會安裝這總應用的。

再說使用方式,linux伺服器很多情況下不會使用圖形界面,這也就減少了GPU的使用和部分CPU的佔用,軟體上也有更多定製的可能。

而Android應用上,比如說手機QQ,裡面集成的東西非常之多,但是你用到的只有那麼幾種,但在伺服器上,不用的東西一般是不會存在的。

在「搜狗輸入法」里,內置了搜狗搜索和搜狗手機助手,然而你用到的只是輸入法,但這些東西還是會繼續佔用你的性能。

其實伺服器,也會卡,只是性能佔用上並沒有達到極端,到了,也會變得卡頓。


我選擇把鍋推給 GUI。

目前來說大部分人類的工程能力還是無法完全駕馭 GUI,基本上涉及到 GUI 的東西(外因)或多或少會有內存泄露問題,或(內因)為了某種程度降低工程難度而使用了不那麼高效的實現方式(Garbage Collection 應運而生)…


推薦閱讀:

2017年6月19-20日在北京舉行的 LinuxCon 會議有哪些看點?
linux為什麼需要內核棧,系統調用時直接使用用戶棧不行嗎?
裝載著操作系統的磁碟是默認裝到內存0x8000位置,那ORG 0x7c00又是在做一個什麼事情呢?
linux內核啟動關於先有雞再有蛋的問題?
請問如何從下載的linux內核文件繼續編寫操作系統?

TAG:手機 | Linux | Android手機 | Android | Linux內核 |