推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
qsnow6
V2EX  ›  Python

Python 的内存泄露,内存直接爆炸

  •  
  •   qsnow6 · Feb 9, 2017 · 9215 views
    This topic created in 3566 days ago, the information mentioned may be changed or developed.
    ````
    import time
    b_time = bytes(int(time.time()))
    print(b_time)
    ````

    ubuntu 16.04 64bit下,一运行,内存直接爆炸
    Supplement 1  ·  Feb 10, 2017
    不好意思哈,各位,刚入门,敲代码的时候发现这么个有意思的;)
    53 replies  •  2017-02-16 23:02:09 +08:00
    abc950309
    abc950309
    Feb 9, 2017
    1
    刚刚重启完电脑,表示不作死就不会死…………
    这是什么原理啊…………
    sleshep
    sleshep
    Feb 9, 2017❤️2
    2
    bytes 输入数字表示创建一个长度为此数字的缓冲区,
    当前时间戳很大,所以缓冲区很大,不就内存溢出了,
    那不叫泄露,不要乱写标题
    binux
    binux
    Feb 9, 2017❤️2
    3
    python3 的 bytes(n) 的意思是,创建一个 size 为 n 的对象
    karlakte
    karlakte
    Feb 9, 2017❤️2
    4
    这就嘬死 不叫泄漏
    phrack
    phrack
    Feb 9, 2017 via Android
    5
    申请太多内存了。

    也遇到过,感兴趣的是,为什么没有一个机制强行停止这个操作,当时一执行直接爆炸,按啥都没卵用。
    BruceAuyeung
    BruceAuyeung
    Feb 9, 2017 via Android
    6
    @phrack ulimit
    aprikyblue
    aprikyblue
    Feb 9, 2017
    7
    你先查查啥叫内存泄漏
    Mirana
    Mirana
    Feb 9, 2017
    8
    oom?
    ericbize
    ericbize
    Feb 9, 2017
    9
    <a href="http://imgur.com/dXfWmDp"><img src="" title="source: imgur.com" /></a>


    内存:我的内心毫无波动
    yanchao7511461
    yanchao7511461
    Feb 9, 2017
    10
    应该是内存耗完,不是泄漏
    ericbize
    ericbize
    Feb 9, 2017
    11
    楼主,要 python 3 吗 ?
    longaiwp
    longaiwp
    Feb 9, 2017
    12
    这是个鬼泄露啊,这明显是申请过多好嘛
    est
    est
    Feb 9, 2017
    13
    1. 你 bytes() 姿势不对
    2. 有不爆炸的内存泄露吗?
    a87150
    a87150
    Feb 9, 2017
    14
    我还以为是什么 bug ,原来是自己作死
    wxjeacen
    wxjeacen
    Feb 9, 2017
    15
    确实是自己作死。
    weyou
    weyou
    Feb 9, 2017 via Android
    16
    没炸伤就好~
    kn007
    kn007
    Feb 9, 2017
    17
    作死溢出。。
    lhbc
    lhbc
    Feb 9, 2017❤️1
    18
    楼主你穿越回 1970 年 1 月 1 号就没有这个 bug 了
    neurocomputing
    neurocomputing
    Feb 9, 2017
    19
    是啊,这不叫泄露,这叫作死
    orcusfox
    orcusfox
    Feb 9, 2017
    20
    也就 1.5 个 G ?其实还好吧
    j5shi
    j5shi
    Feb 9, 2017 via iPhone
    21
    现在有太多没有计算机背景的“程序员”,对计算机底层一窍不通,并对发明轮子乐此不疲。
    JRight
    JRight
    Feb 9, 2017
    22
    楼主不要太受打击哈,慢慢进步~
    seiuneko
    seiuneko
    Feb 9, 2017
    23
    @abc950309 看完你的回复后在虚拟机试了下 然后 boom~~~
    @ericbize 你试试 py3 我虚拟机 14128MiB 直接爆炸 我不会告诉你我刚刚冷重启的
    wohenyingyu02
    wohenyingyu02
    Feb 10, 2017 via iPhone
    24
    @j5shi 我学计算机的同学都没有当程序员……
    sl0000
    sl0000
    Feb 10, 2017
    25
    @j5shi 怎样才是有计算机背景的"程序员"?
    enenaaa
    enenaaa
    Feb 10, 2017
    26
    win7 4G 内存,只是内存耗尽卡顿一段时间。
    这样看来还是 windows 稳啊
    Citrus
    Citrus
    Feb 10, 2017
    27
    If it is an integer, the array will have that size and will be initialized with null bytes.

    所以也就是 1486656000 bytes 差不多 1.384556293 GB ,不会炸啊=。=
    j5shi
    j5shi
    Feb 10, 2017 via iPhone
    28
    @wohenyingyu02 不懂你在说什么,我可没说学计算机的都要去当程序员。
    j5shi
    j5shi
    Feb 10, 2017 via iPhone
    29
    @sl0000 比如不懂 C (或者 Clang 的)的就可以称为“没有计算机背景”。异或可以这么理解,能把这个称为“内存泄露”的,就是没有计算机背景。
    wohenyingyu02
    wohenyingyu02
    Feb 10, 2017
    30
    @j5shi 学计算机的都不去当程序员,自然只能没有背景的当。我就是你说的那种“程序员”,我学会计法律的,但是我比我认识的大多数学计算机的同学都混得好,可能是因为我学校烂吧。
    xvx
    xvx
    Feb 10, 2017 via iPhone
    31
    这叫内存泄漏……
    ericbize
    ericbize
    Feb 10, 2017
    32
    @F0nebula python 3.5 一直在跑没死机 (我的不是虚拟机)

    <a href="http://imgur.com/B04dVyO"><img src="" title="source: imgur.com" /></a>

    <a href="http://imgur.com/a2pgZV8"><img src="" title="source: imgur.com" /></a>


    没事啊,就是不知道要跑到什么时候

    楼主,有升级内存的理由了 。
    ericbize
    ericbize
    Feb 10, 2017
    33
    还能跑完

    <a href="http://imgur.com/0nwaf6h"><img src="" title="source: imgur.com" /></a>
    treo
    treo
    Feb 10, 2017
    34
    100 年后、 1000 年后的计算机碰到这种场景还会卡顿吗
    换句话说,计算机性能的增长能赶上 timestamp 的增长速度吗
    j5shi
    j5shi
    Feb 10, 2017 via iPhone
    35
    @wohenyingyu02 我可没说计算机背景指的是
    需要 CS 相关教育经历,你缺的是自信。
    freestyle
    freestyle
    Feb 10, 2017
    36
    @ericbize 你的 Ubuntu 是日常使用机器码?中文输入在 IDE sublime 上有没有问题
    chez
    chez
    Feb 10, 2017
    37
    Traceback (most recent call last):
    File "<pyshell#5>", line 1, in <module>
    print(b_time)
    MemoryError

    python3.6 就报个内存错误
    ryd994
    ryd994
    Feb 10, 2017
    38
    难道我用的是假 Python ?还是说我用的假 Linux ? Fedora 说这锅 Python 不背


    @treo 你想多了,早就根本不虚了。因为有黑科技叫 overcommit 。 kernel 早就看穿了你们分配了这么多内存一定用不完
    nilai
    nilai
    Feb 10, 2017
    39
    python3 测试有效。
    seiuneko
    seiuneko
    Feb 10, 2017
    40
    @ericbize 好吧 我真机试了下 无压力 不过虚拟机刚开始能看到内存狂飙 然后大概是打印时系统挂了
    lostsquirrelX
    lostsquirrelX
    Feb 10, 2017
    41
    应该是死在 print 上面
    Felldeadbird
    Felldeadbird
    Feb 10, 2017
    42
    有意思!弄成恶作剧发给同事、
    hezhile
    hezhile
    Feb 10, 2017
    43
    Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> import time
    >>> b_time = bytes(int(time.time()))
    >>> print(b_time)
    Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
    print(b_time)
    File "C:\Users\gilot\AppData\Local\Programs\Python\Python35\lib\idlelib\PyShell.py", line 1343, in write
    return self.shell.write(s, self.tags)
    OverflowError: cannot serialize a string larger than 4GiB
    >>>

    在 process explorer 里面, pythonw.exe 的 private bytes 确实飙升到了 7.3G (我的电脑内存只有 8G )
    操作系统是 win10 pro ,有大概 10 秒钟的时间整个系统没有反应
    wuruxu
    wuruxu
    Feb 10, 2017
    44
    怎么爆炸了,一点反应也没有
    ```
    xyz@debian:~$ python
    Python 2.7.9 (default, Jun 29 2016, 13:08:31)
    [GCC 4.9.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import time
    >>> b_time = bytes(int(time.time()))
    >>> print(b_time)
    1486711277
    >>> ls
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'ls' is not defined
    >>>
    xyz@debian:~$

    ```
    kkk330
    kkk330
    Feb 10, 2017 via iPhone
    45
    就像 38 楼说的,我也记得 Linux 下内存或者硬盘空间都可以申请超过实际大小(并不会真的分配给你,感觉炸了说不通啊
    langjiyuan
    langjiyuan
    Feb 10, 2017
    46
    已 get 可以忽悠 有些自大的舍友去调试了
    zhjits
    zhjits
    Feb 11, 2017
    47
    http://imgur.com/a/r14mh
    这个内存泄漏可能是真的……
    zhjits
    zhjits
    Feb 11, 2017
    48

    目前内存占用似乎到顶了, print 执行过程中一直保持这个值
    zhjits
    zhjits
    Feb 11, 2017
    49

    print 完内存占用就回去了,没泄露,只是 print 的 format 过程占用内存稍微大了一点而已
    q397064399
    q397064399
    Feb 11, 2017
    50
    内存泄露是指程序申请的堆内存没有被正常回收导致内存泄露
    Khlieb
    Khlieb
    Feb 12, 2017 via Android
    51
    熊叔: boom
    cxbats
    cxbats
    Feb 12, 2017 via Android
    52
    这也叫泄漏?那 malloc(1000000000) 是不是也叫内存泄漏
    ericbize
    ericbize
    Feb 16, 2017
    53
    @freestyle 不是日常使用,只是偶尔开开,那个输入中文的话还好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   893 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 205ms · UTC 20:34 · PVG 04:34 · LAX 12:34 · JFK 15:34
    ♥ Do have faith in what you're doing.