相关疑难解决方法(0)

从Python代码中的方法打印当前调用堆栈

在Python中,如何从方法中打印当前调用堆栈(用于调试目的).

python debugging stack-trace

257
推荐指数
6
解决办法
11万
查看次数

一个简单的"Hello World"在64位机器上需要10G虚拟内存而在32位机器上需要1G?

在我们的生产机器上运行一个简单的Java程序,我注意到这个程序占用了更多的10G virt.我知道虚拟内存不是那么相关,但至少我想了解为什么需要它.

public class Main {
  public static void main(String[] args) {
        System.out.println("Hello World!");
        try {
                Thread.sleep(10000);
        } catch(InterruptedException e) {
                /* ignored */
        }
  }
}
Run Code Online (Sandbox Code Playgroud)

top当我运行那个小程序时,这是什么意思:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18764 myuser    20   0 10.2g  20m 8128 S  1.7  0.1   0:00.05 java
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

uname -a说:

Linux m4fxhpsrm1dg 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

在较旧的32bit-linux机器上,同一程序仅消耗大约1G的virt.旧机器有4GB RAM,新机器有32GB.

java 64-bit jvm memory-management virtual-memory

66
推荐指数
4
解决办法
9597
查看次数

Python内存占用量与堆大小

我在使用python脚本发出大型solr查询时遇到了一些内存问题.我正在使用solrpy库与solr服务器进行交互.该查询返回大约80,000条记录.发出查询后立即通过顶部气球查看到的python内存占用量为~190MB.

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
8225 root      16   0  193m 189m 3272 S  0.0 11.2   0:11.31 python
...
Run Code Online (Sandbox Code Playgroud)

此时,通过heapy查看的堆配置文件如下所示:

Partition of a set of 163934 objects. Total size = 14157888 bytes.   
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  80472  49  7401384  52   7401384  52 unicode
     1  44923  27  3315928  23  10717312  76 str
...
Run Code Online (Sandbox Code Playgroud)

unicode对象表示查询中记录的唯一标识符.需要注意的一点是,总堆大小只有14MB,而python占用190MB的物理内存.一旦存储查询结果的变量超出范围,堆配置文件就会正确反映垃圾收集:

Partition of a set of 83586 …
Run Code Online (Sandbox Code Playgroud)

python solr memory-leaks

10
推荐指数
1
解决办法
4649
查看次数

如何在 Python 3 中使用 Python 2 中的 .so 模块?

可能我的问题很明显,但我找不到明显的决定。

有 Python 2.6+ 扩展名为auditauparse。这些是与audit-libs-python包一起分发的动态库:

[vitaly@thermaltake tmp]$ repoquery -lq audit-libs-python
/usr/lib64/python2.7/site-packages/_audit.so
/usr/lib64/python2.7/site-packages/audit.py
/usr/lib64/python2.7/site-packages/audit.pyc
/usr/lib64/python2.7/site-packages/audit.pyo
/usr/lib64/python2.7/site-packages/auparse.so
Run Code Online (Sandbox Code Playgroud)

我想在最新的 Python 解释器中使用这个扩展,因为怀疑在 python 2.6+ 中对动态内存的处理不正确。出于某种原因,我无法从 Python 3.3 加载它们:

[vitaly@thermaltake ~]$ python3.3
Python 3.3.2 (default, Mar  5 2014, 08:21:05) 
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/usr/lib64/python2.7/site-packages/")
>>> import auparse
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/lib64/python2.7/site-packages/auparse.so: …
Run Code Online (Sandbox Code Playgroud)

python linux python-module shared-libraries

3
推荐指数
1
解决办法
3203
查看次数