【问题标题】:CPU usage difference between ps aux and -efps aux 和 -ef 之间的 CPU 使用率差异
【发布时间】:2013-12-27 10:21:48
【问题描述】:
[user@centos-vm-02 ~]$ ps aux|grep python
user      4182  0.0  0.0   9228  1080 ?        Ss   02:00   0:00 /bin/sh -c cd data/trandata && /usr/local/bin/python2.7 main.py >> /dev/null 2>&1
user      4190  0.1  0.1 341108 10740 ?        Sl   02:00   0:52 /usr/local/bin/python2.7 main.py
user      4205  166  1.6 1175176 129312 ?      Sl   02:00 901:39 /usr/local/bin/python2.7 main.py
user     10049  0.1  0.1 435856 10712 ?        Sl   10:21   0:04 /usr/local/bin/python2.7 main.py
user     10051 71.1  2.5 948248 207628 ?       Sl   10:21  28:42 /usr/local/bin/python2.7 main.py
user     10052 51.9  1.9 948380 154688 ?       Sl   10:21  20:57 /usr/local/bin/python2.7 main.py
user     10053 85.9  0.9 815104 76652 ?        Sl   10:21  34:41 /usr/local/bin/python2.7 main.py
user     11166  0.0  0.0 103240   864 pts/1    S+   11:01   0:00 grep python
[user@centos-vm-02 ~]$ ps -ef|grep python
user      4182  4174  0 02:00 ?        00:00:00 /bin/sh -c cd /data/trandata && /usr/local/bin/python2.7 main.py >> /dev/null 2>&1
user      4190  4182  0 02:00 ?        00:00:52 /usr/local/bin/python2.7 main.py
user      4205  4190 99 02:00 ?        15:01:46 /usr/local/bin/python2.7 main.py
user     10049     1  0 10:21 ?        00:00:04 /usr/local/bin/python2.7 main.py
user     10051 10049 71 10:21 ?        00:28:47 /usr/local/bin/python2.7 main.py
user     10052 10049 51 10:21 ?        00:21:01 /usr/local/bin/python2.7 main.py
user     10053 10049 85 10:21 ?        00:34:45 /usr/local/bin/python2.7 main.py
user     11168 10904  0 11:01 pts/1    00:00:00 grep python

如我们所见,我启动了一个 python 进程,它将生成多进程,并且在进程内部启动多线程,在线程内部启动多线程。

这样的进程树:
主进程
--sub_process
----线程1
------子线程
------子线程
------子线程
------子线程
----线程2
----线程3
--sub_process
----......
图中pid-4205在ps aux和ps -ef中显示不同的CPU使用率,一个是166,一个是99,top -c也显示了166。
而且我保证 pid-4205 是子进程之一,这意味着它不能在 python 中使用超过 100% 的 CPU 和 GIL。
所以这就是我的问题,为什么 ps -ef 和 ps aux 显示不同。

【问题讨论】:

    标签: python multithreading ps


    【解决方案1】:

    这只是一个采样工件。假设一家工厂每小时生产一辆汽车。如果您在制造汽车之前到达那里并在制造汽车之后立即离开,您会看到在一个多小时的时间内制造了两辆汽车,导致您认为工厂的产能几乎翻了一番。

    更新:让我试着澄清一下这个例子。假设一家工厂每小时生产一辆车。它不能每小时生产超过一辆车。如果您从 7:59 到 9:01 观看工厂,您将看到两辆汽车在短短一个多小时(62 分钟)内生产出来(一辆在 8:00 和一辆在 9:00)。所以你会估计工厂每小时生产大约两辆汽车,几乎是实际产量的两倍。这就是这里发生的事情。这是top 在错误的时间检查 CPU 计数器造成的采样工件。

    【讨论】:

    • 对不起,T_T先生,我真的不明白你的意思。
    • 你能澄清一下你不明白的是什么吗?你不明白我的例子吗?或者你不明白它会如何应用?
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多