手机总是容易满内存,到底是什么在占内存?

手机总是容易满内存,到底是什么在占内存?,第1张

问这个问题,应该是Android手机的玩家吧,而且你对Android的内存机制也不了解,简单来说,Android中的内存就是给你用的,不用还不正常,根本不用担心内存怎么只剩下几百M呢。

像我们这些在Windows陪伴下成长起来的玩家,“内存不足”经常遇到,但是Android有着与Windows完全不一样的内存管理机制,Windows上的那一套,对Android并没用。

Android中可用内存是个没意义的数字

Windows中一旦程序被关闭,分配的内存也就释放出来,然而在Android中运行过的应用绝大多数是从前台转入到后台,并保留在内存中并不会也不需要主动释放,这样下次再运行该应用时,可以更快的启动。

无论手机的物理内存有多大,Android都能将其充分利用,将需要用到的数据从硬盘读入到内存,以提高数据访问性能,也就是说, 在Android系统中,可用内存越小,表明其调用的数据就越多,访问的命中率就越高,系统也就越快 。

你可能会问,当打开的应用越来越多,占用的内存总会爆满的,那怎么办呢?

Android有着优秀的内存回收机制

Android使用了一个名为Low Memory Killer(LMK)的机制来管理内存,当内存出现不足时,LMK就开始挥舞屠刀杀掉一些进程以获得新的内存空间。

Android有一套独特的进程管理,它会以oom_adj来表示进程的重要性,oom_adj的值越小,则重要性越高,oom_adj的值越大,该进程被系统选中杀掉的可能性越高。

Android默认的进程管理策略

为了更好的评估进程的重要性,Android将进程分为六类,如下所述:

前台进程:oom_adj=0,指正在当前屏幕上显示的进程和一些系统进程,一旦你回到主界面 或切换到其它程序,当前进程变为隐藏进程,前台进程是不会杀掉的;

可见进程:oom_adj=1,可见进程虽然不在前台,但依然可见,如widget、输入法等,这部分进程也非常重要,基本上不可能被杀掉;

次要服务:oom_adj=2,目前正在运行的一些服务,如下载、播放音乐,它们虽然属于次要服务,但与系统息息相关,一般也不会被杀掉;

隐藏进程:oom_adj=7,这个很容易理解,当应用从前台转入到后台后,也就成为隐藏进程了,通常一键清理内存就是清掉这些隐藏进程;

内容提供者:oom_adj=14,没有程序实体,只提供内容供别的程序去用的,比如日历供应节点,显然这类进程最有可能被先杀掉;

空进程:oom_adj=15,有些程序在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些 历史 信息,这类进程无疑是要最先被杀掉的。

Android的内存管理机制非常适合嵌入式系统,能充分发挥出硬件的潜力,当内存越大,它的优势就越明显。

Android手机需要清内存吗?不需要

那么Android手机到底要不要清内存?结论是:不需要!其实这个结论也适用iPhone手机。

手机内存分为两部分,运行内存和存储内存。买手机时,一个型号的手机有很多套餐可以选择,比如6 64GB、4+128GB,前面的4GB,6GB就是运行内存,后者则是存储内存。

占用手机运行内存的主要是手机运行程序时被软件占用的内存,安卓手机的系统会把手机里说有的软件都放在后台运行之中,因为这样开启软件的时候会节约等待启动的时间,除非用户自己去设置关闭开机自动启动软件。

可运行内存一共就那么多,虽然现在新款手机的运行内存不断加大但随着软件的不断更新升级,占用的手机内存也会越来越大,这都是成正比的。为了清理软件占用的内存,安卓手机都会配备“一键清理”的功能去清理运行内存,这样可以使因为占用运行内存过多而变卡顿的手机流畅起来。

而占用存储内存的东西就有很多了,比如软件的数据缓存、微信qq的聊天记录、相册里的照片、下载的音乐视频、短信垃圾、手机随着系统升级,本身系统所占的内存也会越来越大,这些都会占用手机的存储内存。

其中最占用存储内存的就当属照片和微信了。那么该怎么看微信到底占用了多少内存呢?

点开微信中的[我]-[设置]-[通用]-[清理微信存储空间],等待几秒钟后就会显示占了多少内存了,如果你不经常清理,那这个数字一定会让你大吃一惊。然后点击下方的[管理微信聊天数据]清楚就好了。

一般如果是安卓手机的话,如果手机内存较小,很容易出现内存不够用的情况。安卓系统、应用厂商的服务、手机应用等都会占用大量的内存,由于国内手机厂商深度定制的安卓系统,普遍存在全家桶,大量的服务和应用存在自启和连环唤醒情况,大量消耗用户内存,造成手机内存占用过高,严重影响了用户的使用体验。而反观国外很多采用原生安卓系统的手机,虽然内存并不大,但内存的占用率却极低,实际的应用体验却更优秀。所以国内手机厂商的全家桶,是造成手机内存占用率较高的主要原因。一般可以通过手机助手清理内存,禁止应用自启,卸载无用应用等方法解决手机内存占用较多的问题。

国产手机系统全家桶导致手机内存占用过大

由于目前手机的硬件利润较低,很多国内手机厂商都是通过预装应用的方式,提升手机的利润。所以国产手机普遍存在以全家桶的方式,打包预装各种应用和服务,通常会在手机中进行自启,或者连环唤醒,占用了大量的手机内存,严重影响了手机用户的体验。

手机内存占用过高,可以借助手机卫士清理内存

如果手机的内存占用过高,可以借助手机卫士等工具对手机的内存进行清理,对于不常用的手机应用进行卸载,提升手机的运行效率。另外也可以通过禁止手机应用的自启,来提升手机内存的使用效率,但对于手机存在应用连唤醒的情况,是无效的。所以手机卫士或管家,只能暂时解决手机内存占用过高的问题,无法从根本上解决问题。

使用第三方原生安卓系统,可大幅降低手机内存占用

目前的cm等第三方原生安卓系统,一般都不夹带国产手机厂商的全家桶,系统十分纯净,一般对于手机内存的占用都比较小。一般如果条件允许的话,可以刷第三方的原生安卓系统,提升手机内存的使用效率。

cm系统是老手机的救星

华为荣耀畅玩4,搭载的骁龙410芯片,仅配置了1g内存,可以说硬件配置十分渣,运行华为自带emui系统,内存占用极高,基本卡都没办法使用。但刷cm13系统后,竟然满血复活,运行普通应用十分流畅,完全可以当做备用机使用。这也充分说明,很多国产手机在硬件配置方面没有太大瓶颈,主要是国产手机系统的全家桶,占用大量内存,拖慢了整机的速度。

对于手机内存占用过大的问题,主要是由于安装和启动的手机应用较多,特别是很多国产手机的全家桶,占用和消耗了大量的手机内存,影响了手机的使用效率。一般可以通过手机卫士等工具,清理内存,禁止应用自启等方法解决手机内存占用过大的问题。如果想从根本上解决这个问题,更多的还是依靠手机厂商摒弃全家桶,推出类似cm的第三方原生安卓系统。如果条件许可的话,用户也可以刷cm等比较纯净的第三方安卓系统。

关闭一些没必要自动运行的软件,浏览器可以选择无图模式,音乐播放器可以关闭歌手显示,视频播放器要时刻的清理缓存,还有软件安装后自动删除安装包, 游戏 停止运行后,手动清理全盘缓存,QQ压缩包,文件管理器中可以找到,格式zip,如果你知道文件夹是哪个软件所有,觉得清理掉不会影响使用,就清理了,你会发现手机内存又多了至少2GB,不信你就试试吧

智能手机的用户有一个无法规避的问题,那就是手机的卡顿问题,造成手机卡顿的因素有很多,内存不足便是其中的一种。为了尽量避免手机出现卡顿的这种情况,部分用户不惜花费重金来购买高内存的手机,但是依然无法完全规避因为内存不足所导致的手机卡顿问题。低内存手机很好理解,为何高内存手机同样也会出现该问题呢?手机中究竟是怎么在使用内存,该如何规避因为内存不足而导致手机卡顿的这种问题呢?

关于手机内存您又了解多少呢,我们先单纯的从技术面来简单的聊聊这个问题。手机内存可以分为两大类,一类是运行内存,一类是存储内存。前者相当于电脑中的内存,内存空间越大同时支持的运行程序也就越多,较为常见的运行内存有6G、8G、12G等,甚至一些旗舰机型也支持32G的运行内存;后者相当于电脑中的硬盘,内存空间越大意味着能够存储更多的内容资源,包括下载的程序、照片、音频、视频等,较为常见的存储内存有64G、128G、256G等,甚至一些旗舰机型也推出了512G以上的存储内存。

手机厂商标称的内存大小是否与我们实际使用的空间相同呢?

前不久岳云鹏也因为在微博上提出了这个问题而上了热搜!岳云鹏购买了一款128G的手机,但是实际能够使用的空间仅为112G,不仅发出了手机内存难道也存在“公摊面积”的疑问。无论是运行内存也好,还是存储内存也罢,手机厂商采用的进制计算方式与系统不同,导致存在一定的偏差问题(一个采用的是1000进制,一个采用的是1024进制)。除了进制的问题外,手机内存还要被其他内容所占用,例如运行内存开机之后的系统进程占用,通常可供用户使用的运行内存仅为总运行内存的一般,存储内存需要安装操作系统,系统的默认软件等。

排除了这些基本因素外,再来说说智能手机剩余内存为何会容易占满的问题。

先来说说运行内存容易占满的问题(因为运行机制的不同,这里主要讨论的是安卓手机,苹果手机很少会出现此类问题),主要的原因在于智能软件的自行唤醒功能。智能手机现在所使用的软件大部分为免费软件,主要依靠用户流量所带来的广告收益盈利。无论是前台还是后台,软件运行才是获得收益的前提,很多软件或者是同厂软件在没有获得用户同意的前提下,会悄悄地自动进行唤醒,悄然运行在用户的运行内存中,势必会导致用户运行内存逐渐占满。工信部为此也拟定了个人用户信息保护征求意见稿,未经用户许可的前提下,APP软件不得自行唤醒或者更新。

那么,存储内存就是是何原因会逐渐占满呢?

手机硬件的提升势必会带来更大的资源占用,举一个简单的例子,现在供用户手机拍照高清摄像头成为了发展趋势,之前一张照片或许仅为4M左右,现在一张照片将在20M以上,对于存储的需求也越来越高。除此之外,出于个人信息安全的角度考虑,很多APP软件并不会在服务器端存储用户的个人数据,这一数据存储在用户的智能手机存储内存,例如大家较为常用的微信、QQ等,随着时间的推移,您会发现此类程序占用的空间越来越高!

对于运行内存,我们可以通过设置、优化运行程序来降低其占用率,确保手机不会因此而卡顿。不同品牌的手机都会自带内存优化工具,以我手上的三星手机为例,可以在智能管理器、内存选项中查看当前的使用状态,并且可以根据系统的提示进行内存优化。另外在手机设置、程序管理中,大家可以对具体的某款应用程序进行设置,关闭其后台自动唤醒的功能。对于手机操作并不是十分熟悉的用户,可以下载三方手机优化软件来自动对运行内存进行优化,不过个人并不建议如此操作,毕竟三方软件也要耗费手机硬件资源。

对于存储内存,只能够是删除不必要的数据进行优化。合理利用云存储是个不错的方法,无论是手机自带,还是三方云存储都能够缓解我们存储内存的压力(只要能够连接网络,有需求的数据直接从云端下载即可)。对于微信、QQ此类占据空间的程序,只能够通过删除内容的方式来降低空间,为了方便也可以直接卸载、重新安装来释放空间。为了避免关键数据出现丢失,卸载之前可以将数据导致电脑端进行存储,各款软件基本上都提供了由手机向电脑进行数据迁移的功能。

手机占用内存最大的就是系统和软件,系统方面你可以通过刷机来改变大小,可以在手官网(或者其他大神资源)找一个自己机型的精减刷机包, 软件方面你可以在安智市场里面下载 历史 版本,较小的软件包可以减轻手机内存压力,另外你还可以root手机,root后可以禁止软件自启,阻止软件相互唤醒,删除不需要的系统软件,一星期左右可以关机一次,彻底释放内存。

手机总是容易满内存,到底什么占内存?

手机的内存我们在这里一般称为手机存储数据的空间。一般它类似于电脑的硬盘,手机的内存基本上能够给我们带来的好处是让我们手机能够安装更多的数据,存放更多的文件,不会因为手机内存的不足影响手机的流畅,让手机卡顿。

我们在使用手机的过程中确实会担心手机的内存不足,在我们手机内存不足的情况下,我们会建议大家考虑清理一些内存数据,这样子的能够让手机的内存相对比较充足,手机会相对比较流畅。

特别是对于苹果手机来说,苹果手机如果内存不足的话,在日常使用过程中确实会出现非常严重的卡顿问题,手机在内存严重不足的情况下,能够让手机整体体验值相对不高。

那么,手机的内存到底是哪些那种东西呢?

手机的内存一方面指的是手机系统,手机本身的内置软件所占用的空间。也就是手机出产时,它所占据的一部分的空间。这部分空间是固定的,除非是在系统之后升级,可能会有一定空间的变化,基本上是不会改变的。

手机内存另外一方面是我们在使用手机过程中下载的各种APP以及我们存储的各种数据照片,视频等等。同样还有我们在使用一些APP的时候会出现的一些缓存数据,特别像微信,它的缓存数据占据空间相对较大。

所以,我们在日常使用手机过程中,一定要注意清除手机APP中的一些缓存,这样能保证手机的内存数据得到更好的使用,不会因为手机内存数据的不足影响手机的流畅。

手机内存分为运行内存(RAM,简称运存)和存储内存(ROMZ)两种。运行内存比较少,手机一般4G和6G居多。存储内存较大,一般16G—512G,其中64G和128G居多。比如一款手机为“6+64G”的内存,就代表着6G的运行内存和64G的存储内存。

运行内存是为手机运行的程序服务的,换句话说,就是储存运行中的程序的这部分内存。手机不像电脑,当你退出一个程序后,这个程序不会直接关闭,而是在后台继续运行。就比如当你在下载一部**的时候,你返回桌面或者打开其他软件,这部**还在继续下载。

只有2G运存的安卓机相信不少人都用过,只要后台运行的程序一多,分分钟给你卡到原地爆炸。而反观只有1G运存的苹果却从来不会出现这种情况,这是因为两者的系统运行机制不同。苹果的ios系统对于后台运行的软件有很好的优化,系统只会分少量的资源给后台运行的应用。这样即保证了后台应用的运行,也不会耽误新程序的加载速度。而安卓系统就不同了,对于后台运行的程序没有限制,所以后台一多,马上变卡。

不过现在的安卓系统新增了一个叫Low Memory Killer(LMK)的后台程序管理机制。每当运行内存不足时,LMK都会自动关闭最不重要的后台程序来为新程序腾出运行内存和系统空间。所以现在的安卓机只要你不是开太多程序,4—6G的运行内存不会被占满。

存储内存相信大家更熟悉了,就是用来储存数据的内存。手机中每个文件、软件、、视频都需要占用存储内存。而且,随着手机的使用,系统中的垃圾文件会越来越多,更新的软件越来越大,导致内存不够用。在这个一个QQ、微信动辄几个G的时代,32G的手机内存是不够用了。笔者建议大家最好买64G以上的手机,并且定期恢复出厂设置。

设置一下后台最多只同时打开三个或四个应用软件,其实安卓没有必要那么在乎还剩下多少内存,你会发现六个g和四个g内存占用率都是差不多的。都剩下不了多少内存。系统会根据使用习惯把常用软件从rom调入ram中供用户随时快速打来。

在默认情况下,docker容器并不会对容器内部进程使用的内存大小进行任何限制。对于PaaS系统而言,或者对于直接使用docker的用户而言,这非常危险。如果哪个业务容器,出现了内存泄漏;那么它可能会危害到整个主机系统,导致业务app容器所在的主机出现oom。本文将介绍着眼于docker对内存资源的使用,解释背后的原理。同时也给出k8s上如何配置内存限制的方法。

通过下面参数可以为容器设置一个内存使用量硬大小,当超出这个大小时刻,linux系统会根据配置设置决定是否进入oom-killer状态。

docker run --name zxy-docker -m 1g -it busybox bash

单位为:b,k,m和g

如果设置了-m参数,通常情况下如果容器使用内存量超过了设置的硬水线,那么linux的oom-killer触发,它将根据oom-score对容器内部进程进行oom kill。但是不影响宿主机上其他进程。

这个参数设置一定需要在容器run或者create过程中使用了-m参数才可以设置。设置了-m参数,如果容器使用内存超限了,那么oom-kill将触发。如果设置了--oom-kill-disable, 那么容器不会oom,但是此时容器内部申请内存的进程将hang,直到他们可以申请到内存(容器内其他进程释放了内存)

绝对不要在没有使用-m的时候设置--oom-kill-disable 因为这会影响到宿主机的oom-killer

docker 设置容器的-m是通过设置memory cgoup的memorylimit_in_bytes实现的。在没有设置-m的时候这个值为-1,表示容器使用的内存不受限制。

例如:

`bash>docker run --name zxy-memorylimit -it -m 1g docker-build:1206 bash

bash>docker inspect zxy-memorylimit|grep -i pid

“Pid”:24360

bash>cat /proc/24360/cgroup|grep memory

9:memory:/docker/xxxxx

bash>cd /sys/fs/cgroups/memory/docker/xxxx

bash> cat memorylimit_in_bytes

1073741824`

--oom-kill-disable参数实际设置的就是这是了同级目录之下的memoryoom_control,设置此参数就相当于做了如下动作

bash> echo 1 >memoryoom_control

对linux memory cgroup感兴趣的朋友可以参考:

https://segmentfaultcom/a/1190000008125359 一文

在上一节中,我们介绍了-m硬限制容器使用的内存资源。一旦设置了这个-m参数,那么容器内进程使用量超过这个数值,就会被杀或者hang住。docker还提供了一种soft limit就是--memory-reservation,单位和-m一致。当设置了这个参数以后, 如果宿主机系统内存不足,有新的内存请求时刻,那么linux会尝试从设置了此参数的容器里回收内存,回收的办法就是swap了。那么如果此容器还在继续使用内存,那么此容器会遇到很大的性能下降

通常实践是设置--memory-reservevation 的值小于-m的值。

和-m参数一致,此参数docker也是借助于memory cgroup的memorysoft_limit_in_bytes 实现。

2、一个进程是否使用了swap空间以及使用了多少swap空间,可以用/proc/$pid/smap中所有内存区域的swap值进行累加可以计算出

docker做的工作实际上是由runc完成的,docker 创建的hostconfigjson文件(也就是oci接口文件)中,有如下字段描述-m,--memory-reservation等内存资源限制参数:

memory MemoryReservation MemorySwap MemorySwappiness

下文节选自 https://mpweixinqqcom/s/j2FfqUHSRTzczNcfPuwRQw

limits:

cpu: 100m

memory: 100Mi

`

其中limits节限制memory设置的就是docker 容器的-m,而且k8s仅仅使用了-m参数其他参数都没有使用。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4118960.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-17
下一篇2024-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存