当我在 OS X 终端的 stdin 上输入文本时,单行限制为 1024 个字符。例如,cat > /dev/null在我键入(或粘贴)比这更长的行后发出哔哔声,并拒绝接受更多字符。一个有问题的例子是当我想从粘贴的文本中计算字符时cat | wc -c:cat第一长行块。
这似乎是粘贴到标准输入的普遍问题。这个观察到的每行 1024 个字符的标准输入限制可以被删除或推到更高的限制吗?
我需要这个是因为我想粘贴行长超过 1024 个字符的文本。
我也可以使用“heredoc”<< EOT并毫无问题地粘贴我的长行,但随后文本出现在我的 shell 历史记录中,这是我不想要的。
我们有一项常规工作,du它对许多子目录进行摘要,挑选出最严重的违规者,并使用输出来查找是否存在快速上升的事物以发现潜在问题。我们使用diff对快照来比较它们。
有一个顶级目录,有许多(几百个)子目录,每个子目录可能包含数十个(或更多)的文件。
du -s在这种情况下," " 可能非常具有 IO 攻击性,导致我们的服务器保释其缓存,然后出现大量 IO 峰值,这是非常不受欢迎的副作用。
什么策略可以用来获得相同的数据,而没有不必要的副作用?
关于限制单个进程的资源有很多问题和答案,例如RLIMIT_AS可以用来限制进程分配的最大内存,可以看成是VIRT之类的top。有关该主题的更多信息,例如这里有没有办法限制特定进程在 Unix 中可以使用的内存量?
setrlimit(2) 文档说:
通过 fork(2) 创建的子进程继承其父进程的资源限制。跨 execve(2) 保留资源限制。
应该这样理解:
如果一个进程的 RLIMIT_AS 为 2GB,那么它不能分配超过 2GB 的内存。当它产生一个子进程时,2GB 的地址空间限制将传递给子进程,但从 0 开始计数。这两个进程一起最多可以占用 4GB 的内存。
但是,限制整个进程树分配的内存总量的有用方法是什么?
我正在尝试增加当前用户的最大打开文件数
> ulimit -n
1024
Run Code Online (Sandbox Code Playgroud)
我尝试增加和失败如下
> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
所以我做自然的事情并尝试在临时许可下运行,但失败了
> sudo ulimit -n 4096
sudo: ulimit: command not found
Run Code Online (Sandbox Code Playgroud)
问题
使用 Fedora 14
我正在使用convert大约 2,000 张图像创建一个 PDF 文件:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
Run Code Online (Sandbox Code Playgroud)
当输出文件达到 2^31-1 字节 (2 GB ?1) 和消息时,该过程终止可重现
convert: unknown `out.pdf'.
Run Code Online (Sandbox Code Playgroud)
PDF 文件规范允许 ?10 GB。我试图从 中提取更多信息-debug all,但在日志输出中没有看到任何有用的信息。文件系统是ext3,它允许文件至少高达 16 GiB(可能更多)。至于ulimit,file size是unlimited。/etc/security/limits.conf只包含注释掉的行。还有什么可能导致这种情况,我该如何增加限制?
ImageMagick 版本:6.4.3 2016-08-05 Q16 OpenMP
发行版:SLES 11.4 (i586)
我曾经使用 HP-UX 系统工作,老管理员告诉我系统上可以拥有的僵尸进程数量有一个上限,我相信是 1024。
我有一个 systemd 服务(一个 CI 运行程序),它往往会使系统陷入 CPU 密集型作业的泥潭。我刚刚发现平均负载超过 100,我想停止这种胡说八道。
系统上的其他任何东西都没有任何限制,所以交易是我希望其他一切都像现在一样继续运行,但是:
... 对系统上的其他所有东西都起到次要作用。事实上,即使系统上没有其他东西需要剩余 10% 的 CPU 周期,我也希望它们具有 90% 的绝对上限,但如果有任何其他要求 CPU 时间,我希望它们尽可能多他们要第一个。
配置它的最佳方法是什么?我在 EC2 上运行 Arch Linux 并且有可用的 cgroups(包括 cgmanager),但从未使用过它们。
我们有一个在我们的 Web 服务器上运行的脚本,由客户操作触发,它启动一个 unix 进程来生成一些缓存文件。由于此进程对我们客户提供的文件起作用,因此它有时会出现行为不端,运行时间过长以致生成它的 PHP 进程超时或使用太多 CPU 时间以致系统管理员将其杀死。
是否有任何我可以运行的命令会限制进程的 CPU 时间/运行时间?我正在寻找类似的命令/usr/bin/time,我可以在其中运行该命令并将其传递给我希望它运行和限制的命令行。
我想将 1 TB 的数据备份到外部磁盘。
我正在使用这个命令: tar cf /media/MYDISK/backup.tar mydata
问题:每当我使用 100% CPU 或 100% 磁盘时,我那台糟糕的笔记本电脑就会死机和崩溃(如果您想对此做出反应,请写在这里)。所以我想保持在 50% 左右的 CPU 和 50% 的磁盘最大值。
我的问题:如何使用tar命令限制 CPU 和磁盘?
Rsync 有一个 --bwlimit 选项,但我想要一个存档,因为 1) 有很多小文件 2) 我更喜欢管理单个文件而不是一棵树。这就是为什么我使用tar.
我在不同的 GNU/Linux 安装上对此进行了测试:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Run Code Online (Sandbox Code Playgroud)
系统 A 和 D
我遇到的第一个限制是 1024。通过将其放入 /etc/security/limits.conf 可以轻松提高:
* hard nofile 1048576
Run Code Online (Sandbox Code Playgroud)
然后运行:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
现在测试转到 1048576。
但是,似乎我无法将其提高到 1048576 以上。如果我将 1048577 放在limits.conf 中,它就会被忽略。
这是什么原因造成的?
系统B
在系统 BI 上甚至无法到达 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
/etc/security/limits.conf:
* hard nofile 1048576
Run Code Online (Sandbox Code Playgroud)
在这里我得到:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK …Run Code Online (Sandbox Code Playgroud)