swShareMemory_mmap_create:mmap(248000096) failed / Error: Cannot allocate memory[12]

本文主要是介绍swShareMemory_mmap_create:mmap(248000096) failed / Error: Cannot allocate memory[12],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

启用swoole时报的错误,可以确定是内存问题

 
[2019-04-09 09:04:32 @220.0]    WARNING swShareMemory_mmap_create: mmap(260046944) failed. Error: Cannot allocate memory[12]
[2019-04-09 09:04:32 @220.0]    ERROR   calloc[1] failed
    我们查看下内存:

 

[root@VM_0_17_centos docker]# free -m
              total        used        free      shared  buff/cache   available
Mem:            992         495          85         116         412         216
Swap:             0           0           0
    swap全都是0明显有问题,那就加点swap:

 

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 #增加1G的
sudo mkswap /swapfile
sudo swapon /swapfile


[root@VM_0_17_centos docker]# free -m
              total        used        free      shared  buff/cache   available
Mem:            992         494          72         116         426         217
Swap:          1023         419         604
 

    然后就顺利启用swoole了。

 
 
free -m命令详解
[root@localhost ~]# free -m
 
             total       used       free     shared    buffers     cached
 
Mem:          7869       7651        218          1        191       5081
 
-/+ buffers/cache:       2378       5490
 
Swap:          478        139        339

total1:表示物理,内存总量1,2表示1,2行的内容

used1:总计分配给缓存(包含Buffer和cache)使用的数量,但其中可能部分缓存并未实际使用

free1:未被分配的内存

shared1:共享内存,一般系统不会用到,这里也不讨论

buffers1:系统分配但未被使用的buffers数量

cached1:系统分配但未被使用的cache数量

used2:实际使用的buffers和cache总量,也是实际使用的内存总量

free2:未被使用的Buffers和cache和未被分配的内存之和,这就是系统当前实际可用内存。

如下公式:

buffer和cache也是内存的一部分,如果需要,可以释放这2部分的内存

pagecache和buffercache的区别:

pagecache实际上是针对文件系统的,是文件的缓存,在文件上的数据会缓存到pagecahce,文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成,当pagecache中的数据需要刷新时,pagecache中的数据交给buffercache。但这种处理在2.6版本内核之后就变得简单了,没有真正意义的cache操作。

buffercache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘操作的数据会缓存到buffercache中,如:文件系统的元数据都会缓存到buffercache中。简单来说,

pagecache用来缓存文件数据,buffercache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,数据会缓存到pagecache。若直接采用dd工具对磁盘进行读写,那么数据会

缓存到buffercache。

cache和buffer的区别:

a buffer is something that has yet to be "written" to disk

a cache is something that has been "read" from the disk and stored for later use

对于共享内存(shared memory) :主要用于在unix下不同进程间共享数据,是进程间通信的一种方法,一般的应用程序不会申请共享内存。

cache:高速缓存,是位于CPU和主内存间一种容量较小但速度很高的存储器。由于CPU从主内存获取数据要等待一段时间,cahce中保存这CPU刚用过或循环使用的一部分数据,CPU再次使用该部分数据时,可从cache中直接调用,这样就减少了CPU的等待时间。cache又分为L1和L2,L2早期焊在主板上,现在都在CPU中。常见的L2容量有256KB和512KB

3.free中的buffer和cache都是基于内存

buffer作为buffercache的内存,是块设备的读写缓冲区,

cache作为pagecache的内存,文件系统的cache

如果cache的值很大,说明cache中的文件数很多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO必会非常小。

如何释放cachememory:

To free pagecache:echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes:echo 2 > /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes:echo 3 > /proc/sys/vm/drop_caches

  

#注意,释放前最好sync一下,防止丢失数据,但是<strong>一般情况下没有必要手动释放内存<br></strong>

总结:

cache是cpu和内存之间的,buffer是内存和磁盘之间的,都是为了解决速度不对等的问题。

缓存(cache)是把读取过来的数据保存起来,重新读取时若命中,就不去硬盘了,若没有命中就去读硬盘,其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读取的内容不断往后排,直至从中删除。

缓冲(buffer)时根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的的反复寻道,从而提高系统性能,linux有一个守护进程定期清空缓冲内容(即写入磁盘)。

也可以通过sync命令手动清空缓冲。举个例子:我这里有个ext2的的u盘,我往里面cp一个3M的mp3,但u盘的灯没有跳动,过了一会(或者手动输入sync),U盘的灯就跳动起来了。卸载设备时会清空缓存,所以有时候卸载一个设备要等上几秒中。

修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据。

buffer是即将要写入磁盘的,而cache是被从磁盘中读出来的。

buffer由各种进程分配,被用在如输入队列等方面。一个简单的例子是某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。

cache经常被用在磁盘的I/O请求上,如果有多个进程要访问某个文件,于是该文件被做成cache以便下次被访问,这样可以提高系统性能。

Buffer Cachebuffer cache,又称bcache,其中文名称为缓冲器高速缓冲存储器,简称缓冲器高缓。另外,buffer cache按照其工作原理,又被称为块高缓
 

这篇关于swShareMemory_mmap_create:mmap(248000096) failed / Error: Cannot allocate memory[12]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652206

相关文章

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.+后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

UserWarning: mkl-service package failed to import

安装完成anaconda,并设置了两个环境变量  之后再控制台运行python环境,输入import numpy as np,提示错误 D:\InstallFolder\Anaconda3\lib\site-packages\numpy\__init__.py:143: UserWarning: mkl-service package failed to import, therefore

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

Python安装llama库出错“metadata-generation-failed”

Python安装llama库出错“metadata-generation-failed” 1. 安装llama库时出错2. 定位问题1. 去官网下载llama包 2.修改配置文件2.1 解压文件2.2 修改配置文件 3. 本地安装文件 1. 安装llama库时出错 2. 定位问题 根据查到的资料,发现时llama包中的execfile函数已经被下线了,需要我们手动修改代码后

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

收藏:解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

在使用 pip 安装 Python 包时,有时候会遇到 error: subprocess-exited-with-error 错误。这种错误通常是由于 setuptools 版本问题引起的。本文将介绍如何解决这一问题 当你使用 pip install 安装某个 Python 包时,如果 setuptools 版本过高或过低,可能会导致安装过程出错,并出现类似以下错误信息:error: subpr

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso