由于 google chrome/chromium 产生多个进程,因此很难看到这些进程总共使用了多少内存。
有没有一种简单的方法可以查看一系列连接的进程使用了多少总内存?
我正在寻找一种方法来将进程磁盘 io 限制为设定的速度限制。理想情况下,该程序的工作方式类似于:
$ limitio --pid 32423 --write-limit 1M
Run Code Online (Sandbox Code Playgroud)
将进程 32423 限制为每秒 1 兆字节的硬盘写入速度。
我有一个一般性问题,这可能是由于对 Linux 中进程的处理方式的误解所致。
出于我的目的,我将定义一个“脚本”作为保存到文本文件的 bash 代码片段,并为当前用户启用执行权限。
我有一系列相互调用的脚本。为简单起见,我将它们称为脚本 A、B 和 C。脚本 A 执行一系列语句,然后暂停,然后执行脚本 B,然后暂停,然后执行脚本 C。换句话说,该系列步骤是这样的:
运行脚本A:
我从经验中知道,如果我运行脚本 A 直到第一次暂停,然后在脚本 B 中进行编辑,当我允许它恢复时,这些编辑会反映在代码的执行中。同样,如果我在脚本 A 仍然暂停时对脚本 C 进行编辑,然后在保存更改后允许它继续,这些更改将反映在代码的执行中。
那么真正的问题是,有没有办法在脚本 A 仍在运行时对其进行编辑?或者一旦开始执行就无法编辑?
起初,这个问题似乎有点愚蠢/令人困惑,因为操作系统负责管理进程执行。
但是,我想测量一些进程受 CPU/IO 限制的程度,并且我觉得我的操作系统正在干扰我的实验,例如,预定的操作系统进程。
以以下情况为例:我运行了进程 A 两次,并从工具“time”(时间列以秒为单位)得到以下输出:
+---+-------+---------+-----------+---------+
|Run|Process|User Time|System Time|Wall time|
+---+-------+---------+-----------+---------+
|1 |A |196.3 |5.12 |148.86 |
|2 |A |190.79 |4.93 |475.46 |
+---+-------+---------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的,虽然用户时间和系统时间相似,但两者的经过时间发生了巨大变化(相差约 5 分钟)。感觉我的环境中的某些东西引起了某种争用。
我想停止所有可能的后台进程/服务,以避免在我的实验过程中出现任何类型的噪音,但我认为自己是一个新手/中级 unix 用户,我不知道如何保证这一点。
我使用的Linux 4.4.0-45泛型与Ubuntu的LTS 14.04的64位。
我非常感谢您的帮助。如果你们需要任何缺失的信息,我会及时编辑我的帖子。
CPU信息
$ grep proc /proc/cpuinfo | wc -l
8
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor …Run Code Online (Sandbox Code Playgroud) 我正在分别6^6^6使用python和评估表达式bc。
python文件的内容是print 6**6**6. 当我执行时time python test.py,我得到的输出为
real 0m0.067s
user 0m0.050s
sys 0m0.011s
Run Code Online (Sandbox Code Playgroud)
然后,我运行了time echo 6^6^6 | bc给我以下输出的命令
real 0m0.205s
user 0m0.197s
sys 0m0.005s
Run Code Online (Sandbox Code Playgroud)
从这些结果可以清楚地看出,python 和 bc 所用的 sys 时间分别为 11 毫秒和 5 毫秒。在bc命令跑赢蟒蛇在SYS时的水平,但是当它涉及到用户和实时蟒蛇比BC快近4倍。那里可能有什么。我没有对这些过程给予任何优先考虑。我试图了解这种情况。
不久前,我开始使用 Cherokee 托管网站。对于外部源(FastCGI 等),如果找不到在指定套接字或端口上运行的进程,它可以选择启动进程。这很棒,因为这意味着如果 PHP 或 Django 站点发生故障(它们偶尔会发生故障),它会自动重新启动。
在使用 PHP-FPM 的新服务器上,我无法使用 Cherokee(它有一个 PHP 错误),因此我已转移到 NGINX。我真的很喜欢 NGINX(因为它的配置风格),但是我遇到了进程崩溃并且永远不会重生的严重问题。PHP 有时会这样做,但 Django 站点更像是一个问题。我已经为它们创建了 init 脚本,它们在启动时出现,但是如果它们在重新启动之间出现故障,这对我没有帮助。
我想我正在寻找 FastCGI 代理。像切诺基这样的东西,知道哪些进程应该在哪些套接字/端口上运行并按需重新生成它们。这样的事情存在吗?有没有办法将它构建到 NGINX 中(为了便于配置)?
找到要杀死的进程的 PID 使用:
pgrep <process command>
Run Code Online (Sandbox Code Playgroud)
然后我使用kill命令杀死返回的PID pgrep <process command>
kill <PID>
Run Code Online (Sandbox Code Playgroud)
这些命令可以合并为一个,以便可以杀死 PID 或由 返回的 PIDpgrep <process command>吗?或者是否有通过命令名称杀死多个进程的方法?
就像是 : kill(pgrep <name of process>)
传输间歇性地挂在我的 NAS 上。如果我发送 SIGTERM,它不会从进程列表中消失,并且<defunct>旁边会出现一个标签。如果我发送 SIGKILL,它仍然不会消失并且我无法终止父级,因为父级是init. 我可以摆脱该过程并重新启动传输的唯一方法是重新启动。
我意识到我能做的最好的事情就是尝试修复传输(我已经尝试过),但我是编译的新手,我想确保在我开始搞乱它之前我的种子已经完成。
据我了解,僵尸进程已经死亡,但仍作为进程表中的占位符存在,直到其父进程(或者init如果僵尸进程本身是孤儿)检查其退出状态。
我对孤儿进程的理解是,它们仍然活着并运行,但其父进程已经死亡。
既然丧尸已经死了,那么它的孩子就会被视为孤儿,不是吗?他们会受到影响收割僵尸吗?具体来说,init是在收割僵尸后才收养他们作为孩子,还是会在父母变成僵尸后立即收养他们?
我使用 Ubuntu Server 10.10,我想看看正在运行哪些进程。我知道 PostgreSQL 正在我的机器上运行,但我无法使用toporps命令看到它,所以我假设它们没有显示所有正在运行的进程。难道还有其他的命令,它会显示所有正在运行的进程或有任何其他参数,我可以使用top或ps用于本?