我收到抱怨说我消耗了大量互联网带宽。
有没有什么软件可以限制我电脑上的互联网带宽?我使用 Firefox 作为浏览器并使用 bittorrent 并从软件中心下载软件。
(有没有办法监控呢?)
我用我的电脑进行科学编程。它具有健康8GB
的 RAM 和12GB
交换空间。通常,随着我的问题变得越来越大,我超出了所有可用的 RAM。而不是崩溃(这将是首选),Ubuntu 似乎开始将所有内容加载到交换中,包括 Unity 和任何打开的终端。如果我没有及时赶上一个失控的程序,我只能等待 - 切换到命令提示符需要 4-5 分钟,例如。Ctrl-Alt-F2
在那里我可以杀死有问题的进程。
由于我自己的愚蠢超出了本论坛的范围,当我用完单个违规程序的所有可用内存时,如何防止 Ubuntu 通过颠簸崩溃?
打开一个终端,启动python
,如果你已经numpy
安装,试试这个:
>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
Run Code Online (Sandbox Code Playgroud)
* 警告:可能产生不良影响,通过监控进程iotop
或top
及时终止进程。如果没有,我会在你重启后见到你。
我已经运行ulimit -n 65536
,将以下行添加到/etc/security/limits.conf
:
* soft nofile 65536
* hard nofile 65536
alix soft nofile 65536
alix hard nofile 65536
root soft nofile 65536
root hard nofile 65536
Run Code Online (Sandbox Code Playgroud)
并添加session required pam_limits.so
到两者中:
并且fs.file-max = 65536
到/etc/sysctl.d/60-file-max.conf
。
尽管如此,ulimit -n
在我的会话重新启动并运行后,我只得到 4096(之前是 1024)。
我错过了什么?
每当我使用 Ubuntu 软件中心(或任何与此相关的软件包管理器)下载软件包时,我的 Internet 连接速度都会减慢到绝对爬行。事实上,大多数请求超时。
有没有办法限制软件中心在下载软件包时使用的带宽?
有没有办法阻止 ClamScan 吃掉我的服务器 CPU?
我使用的是带有 SFTP 和控制台的 Ubuntu VPS。我需要一个特定的进程来仅使用 60% 的 CPU 和 2048 MB 的 RAM。
我还需要另一个进程仅使用 30% 的 CPU 和 1024MB 的 RAM。
如何限制进程的 CPU 和 RAM 使用量?
我有一个 PHP 脚本,虽然文件夹包含 XML 文件,但会将它们处理到数据库中。
目前,服务器运行的是 PHP 5.3.10 版本,并且有一个关于循环内触发的内存问题的错误报告ZEND_MM_HEAP
。
这会导致 PHP 无法正确释放内存,从而导致错误和脚本崩溃:
zend_mm_heap is corrupted
Run Code Online (Sandbox Code Playgroud)
找到了一些解决方案,但我无权访问服务器设置。
为了解决这个问题,我准备了以下 bash 脚本来处理循环,让 PHP 脚本只负责处理 XML 文件:
#!/bin/bash
# Check for files to process
# If files are present, call
# the PHP script
DIR="/path/to/dir/with/files"
while [ "$(ls -A $DIR)" ]; do
php /path/to/php/script/myscript.php
done
Run Code Online (Sandbox Code Playgroud)
我现在的目标是限制这个 bash 内存分配(内存和虚拟内存),从而防止它在出现问题时挂起系统。
我的问题是:
如何将这个 shell 脚本使用的内存限制为特定数量?
我们试过了/etc/security/limits.conf
,但这似乎没有效果。
用于limits.conf 的行如下所示:
myuser hard nproc 6
Run Code Online (Sandbox Code Playgroud)
那是服务器的配置。我想限制启动的进程。Ulimit 限制从 shell 启动的进程(如果我理解正确的话)。但在我的情况下,apache 启动 mapserver-processes,并且这个数量必须受到限制。
我刚刚意识到我的系统没有正确限制每个用户的进程数量,因此不会阻止用户进行分叉炸弹并使整个系统崩溃:
user@thebe:~$ cat /etc/security/limits.conf | grep user
user hard nproc 512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是为什么它忽略了限制limits.conf
,为什么不应用ulimit -n
声称的限制?
PS:我真的不认为在进程限制之前达到内存限制。这台机器有 8GB 内存,当我扔下叉形炸弹时,它只使用了 4%。 …
从man time
:
M Maximum resident set size of the process during its lifetime, in Kilobytes.
Run Code Online (Sandbox Code Playgroud)
从ulimit -a
:
max memory size (kbytes, -m) unlimited
Run Code Online (Sandbox Code Playgroud)
但“千字节”可能意味着 1000 或 1024 字节。我猜这是一轮 1024,但我想确定一下。权威参考将不胜感激。
请随意将我的问题改写为:执行time
并ulimit
符合 IEC 建议,或使用 kibibyte 含义中的“kilobyte/kbyte”。