在使用python写程序的时候,发现一个可以无限迭代的迭代器,从而可以直接将系统中的内存占满,那么占满之后会发生什么呢?

1、 创建无限迭代,生成列表,如下:

[root@python ~]# python
Python 2.7.11 (default, Mar 20 2016, 14:21:08)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import itertools
>>> r = map(lambda x :x*x,itertools.count(1))

2、监控使用命令vmstat

[root@python ~]# vmstat 1 -S m  #每隔一秒采集一次信息,单位为Mb

3、系统使用情况如下

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 851 15 52 0 0 0 0 414 69 34 3 63 0 0
1 0 0 610 15 52 0 0 0 0 995 7 83 17 0 0 0
1 0 0 458 15 52 0 0 0 0 616 13 70 30 0 0 0
1 0 0 345 15 52 0 0 0 0 489 9 70 30 0 0 0
1 0 0 187 15 52 0 0 0 0 694 11 77 23 0 0 0
3 2 29 50 2 18 0 0 220 41400 1154 190 71 23 0 6 0
1 2 238 65 1 13 0 0 580 191392 1232 261 49 25 0 26 0
1 2 375 50 0 12 0 0 1720 134264 1360 284 64 25 0 11 0
0 3 452 50 0 11 0 0 768 75212 758 150 38 13 0 49 0
1 1 528 62 0 9 0 0 192 74668 972 134 52 18 0 30 0
1 1 700 50 0 9 0 0 0 167244 1084 150 55 23 0 22 0
0 3 767 50 0 9 0 0 0 66068 456 48 17 12 0 71 0
1 1 808 60 0 9 0 0 1652 39688 505 191 17 9 0 74 0
0 3 952 50 0 7 0 0 504 141228 1078 191 57 20 0 23 0
0 2 1068 58 0 7 0 0 288 113176 860 127 40 21 0 40 0
2 2 1136 50 0 7 0 0 1584 66656 939 279 46 17 0 37 0
0 4 1252 50 0 7 0 0 276 113460 679 90 31 14 0 55 0
0 6 1266 53 0 8 0 0 904 13332 267 116 8 4 0 88 0
1 0 1339 63 0 7 0 0 216 71196 957 116 43 19 0 38 0
0 2 1549 52 0 7 0 0 0 205896 1196 194 49 31 0 20 0
1 0 1666 71 0 6 0 0 0 114372 948 57 43 19 0 37 0
0 2 1799 51 0 5 0 0 0 130104 1101 214 57 24 0 20 0
1 1 1922 61 0 5 0 0 0 119856 1092 132 51 23 0 26 0
0 2 2002 50 0 5 0 0 0 77788 662 103 31 17 0 52 0
2 0 2093 51 0 5 0 0 32 89104 1054 257 49 25 0 26 0
0 2 16 990 0 1 0 0 3824 19836 786 1639 21 17 0 62 0

从上面可以看出,swap使用的越来越多,free的空间越来越少,到最后达到swap的最大值之后,开始恢复内存空间。

系统的内存如下:

[root@python ~]# free -m
total used free shared buffers cached
Mem: 996 64 932 0 1 10
-/+ buffers/cache: 52 943
Swap: 2015 14 2001

4、 结论

当内存使用太多,没有剩余的内存的时候,操作系统会直接将进程杀死,如下所示:

[root@python ~]# python
Python 2.7.11 (default, Mar 20 2016, 14:21:08)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import itertools
>>> r = map(lambda x :x*x,itertools.count(1))
Killed

最后一个killed表示杀死进程,开始回收空间。

linux系统中内存爆满之后会如何?的更多相关文章

  1. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  2. 77 swapon-激活Linux系统中交换空间

    Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存. 语法 /sbin/swapon -a [-v] /sbin/swapon [-v] ...

  3. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  4. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  5. Linux系统中“动态库”和“静态库”那点事儿

    摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...

  6. Linux系统中常见文件系统格式

    Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式. 在Linux操作系统里有Ext2.Ext3.Linux swap和VFAT四种格式. FAT16: 作为一种文件名称, ...

  7. 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络

    程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...

  8. Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?

    如题 Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免? 一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结 ...

  9. (笔记)Linux内核中内存相关的操作函数

    linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) ...

随机推荐

  1. SSIS ->> Script Debugging and Troubleshooting

    Breakpoint是调试过程中最重要的手段,不仅对于Script Task和Script Component,对于任何其他的组件也是如此.可以在某个Event(如OnError)触发的时候设置断点来 ...

  2. gearman安装及初次使用

    官网:  http://gearman.org/ 一篇文章: 利用Gearman实现异步任务处理 一.问题分析 问题:在性能测试过程中,发现用户管理平台在进行图片上传时,性能不佳. 分析:经过代码分析 ...

  3. MYSQL数据库错误代码提示汇总

    Mysql出错代码表 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1 ...

  4. linux 系统 tar 的用法详解

    [root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...

  5. hadoop优点和缺点

    l扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据. l成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据.这些服务器群总计可达数 ...

  6. URAL1495. One-two, One-two 2(dp)

    1495 牵扯一点数位 保存数的时候我是按2进制保存的 把1当作0算 把2当作1算 滚动数组 dp[i][j][(g*10+j)%n] = min(dp[i][j][(g*10+j)%n],dp[i- ...

  7. 【转载】Redis多实例及分区

    主要看的这篇文章 http://mt.sohu.com/20160523/n451048025.shtml edis Partitioning即Redis分区,简单的说就是将数据分布到不同的redis ...

  8. android 安装 出现Android Native Development Tools不能安装

    Software being installed: Android Native Development Tools 20.0.0.v201206242043-391819 (com.android. ...

  9. 【笨嘴拙舌WINDOWS】tagTEXTMETRIC结构

    tagTEXTMETRIC用于定义在window输出文字时字的大小,其结构如下: 我在窗体上写了两句话,来详细解剖该结构(在MM_TEXT模式下输出) tmHeight表示一行文字的高度.改例中值为1 ...

  10. Qt之HTTPS登录

    简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...