- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我们正在使用一个相当繁忙的网络服务器。我们想使用 rsync 进行一些数据移动,这显然会破坏磁盘,因此我们使用 ionice
将 rsync 进程置于空闲类中。系统 (SSD+HDD) 上两个磁盘的队列都设置为使用 CFQ 调度程序。结果……磁盘彻底被砸烂,网站性能惨不忍睹。
我已经做了一些挖掘,看看是否有任何调整可以帮助解决这个问题。ionice
的手册页说:
Idle: A program running with idle I/O priority will only get disk time
when no other program has asked for disk I/O for a defined grace period.
The impact of an idle I/O process on normal system activity should be zero.
我在 Google 的帮助下找到的任何地方都没有清楚地解释这个“定义的宽限期”。一篇帖子表明它是 fifo_expire_async
的值,但我找不到任何对此的真正支持。
但是,在我们的系统上,fifo_expire_async
和 fifo_expire_sync
都设置得足够长(250 毫秒、125 毫秒,这是默认值),空闲类实际上应该没有磁盘带宽。即使认为宽限期由 fifo_expire_async
设置的人完全错误,在“空闲 I/O 进程对正常系统事件的影响”的陈述中也没有太多回旋余地应该为零”。
显然这不是我们机器上发生的事情,所以我想知道 CFQ+idle 是否只是被破坏了。
有没有人设法让它工作?非常感谢提示!
更新:我今天做了更多的测试。我写了一个小的 Python 应用程序来读取整个磁盘的随机扇区,中间有短暂的休眠。我在没有 ionice 的情况下运行了这个副本,并将其设置为每秒执行大约 30 次读取。然后,我使用各种 ionice
类运行了该应用程序的第二个副本,以查看空闲类是否按照盒子上的说明进行操作。当我使用 1、2、3 类(实时、尽力而为、空闲)时,我发现结果之间完全没有区别。这个,尽管我现在绝对确定磁盘很忙。
因此,我现在可以肯定 - 至少对于我们的设置 - CFQ+idle 不起作用。
[请参阅下面的更新 2 - 与其说“不起作用”不如说“不起作用”预期“...]
仍然非常欢迎评论!
更新 2:更多戳今天。发现当我大幅提高 I/O 速率时,空闲级进程实际上开始变得饥饿。在我的测试中,这发生在 I/O 速率大大高于我预期的情况下——基本上是每秒数百个 I/O。我仍在尝试弄清楚调整参数的作用...
我还发现了一个相当重要的事实,即异步磁盘写入根本不包含在 I/O 优先级系统中!我在上面引用的 ionice
联机帮助页没有提及该事实,但系统调用 ioprio_set()
的联机帮助页指出:
I/O priorities are supported for reads and for synchronous (O_DIRECT, O_SYNC) writes. I/O priorities are not supported for asynchronous writes because they are issued outside the context of the program dirtying the memory, and thus program-specific priorities do not apply.
这极大地改变了我处理性能问题的方式,我将提议对 ionice
联机帮助页进行更新。
关于内核和 iosched 设置的更多信息(sdb 是 HDD):
Linux 4.9.0-4-amd64 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23) x86_64 GNU/Linux
/etc/debian_version = 9.3
(cd /sys/block/sdb/queue/iosched; grep . *)
back_seek_max:16384
back_seek_penalty:2
fifo_expire_async:250
fifo_expire_sync:125
group_idle:8
group_idle_us:8000
low_latency:1
quantum:8
slice_async:40
slice_async_rq:2
slice_async_us:40000
slice_idle:8
slice_idle_us:8000
slice_sync:100
slice_sync_us:100000
target_latency:300
target_latency_us:300000
最佳答案
据我所知,解决您的问题的唯一机会是使用 CGroup v2(内核 v. 4.5 或更新版本)。请参阅以下文章:
https://andrestc.com/post/cgroups-io/
另请注意,您可以使用 systemd 的包装器在每个服务的基础上配置 CGroup 限制:
关于linux - ionice 'idle' 没有达到预期的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48367857/
我有一个奇怪的问题。根据像this这样的帖子我希望 IDLE 比在命令行上运行我的代码慢。然而,我看到完全相反的情况。 该程序比较两个文件并将匹配行配对在一起并将所有匹配项写入新文件。我认为它类似于
我使用 emacs-24.5.1 浏览了 linux 内核代码,并使用 cedet(内联在 emacs 中)进行语义解析。 经过一些常规配置后,我用emacs打开init/main.c,出现了“Par
我写的字符串很长。为了便于阅读,我想将文本换行到多行。这是怎么做到的。我以前看过说明,但现在找不到了。 最佳答案 [这个答案一般适用于 Python,并不特定于 IDLE。] 对于没有嵌入换行符的长字
是否有任何现有的网络应用程序可以让多个用户同时使用交互式 IDLE 类型 session ? 类似于: IDLE 2.6.4 Morgan: >>> letters = list("abcdefg")
我是编程新手,我决定先学Python,所以; 我安装了 Python,最新版本 3.4。我正在尝试打开 Python IDLE(GUI) 模式,所以当我打开时,我收到消息“IDLE 的子进程没有建立连
最近很多用户发现system idle process占用率特别高,不知道什么意思,想要解决它。这个只是显示电脑剩余内存的,下面来看看想想的介绍吧。 system idle process占用率高
默认的 ATL 简单对象在其 IDL 文件的顶部具有以下内容: import "oaidl.idl"; import "ocidl.idl"; 这些文件有什么用,我怎么知道什么时候需要导入它们?是否有
这个问题在这里已经有了答案: How to clear the interpreter console? (30 个答案) 关闭 9 年前。 我正在运行一个脚本,该脚本使用的模块会在屏幕上打印很多内
这里 TP_DSCVoyChange 类有 KEY_DSC作为一个属性,我们要填充此 KEY_DSC 使用 TP_DSCVoyChange 使用 String 值从 Java 获取值构造函数。例如。
在我的 Mac 上,我通过自制软件安装了 python 3.9。 我尝试启动空闲并收到此错误: > idle3 ** IDLE can't import Tkinter. Your Python ma
我正在使用 this用于检测用户在我的应用程序中是否空闲的库。我正在使用 StartWatching(),在 onTimerStart 中,我现在只是打印控制台。 当用户空闲 N 秒时,onTimer
我们有一个 .NET 程序集(实际上是 Aspose.Words),我们希望客户端能够轻松地从 COM 客户端使用它。 因此,我们随程序集提供了 .TLB,以便客户端可以通过 C++ 或 Delphi
在之前的函数中,我创建并返回了一个哈希值。执行此操作后,它将哈希作为结构返回,我将其用作此以下函数的输入。 myStruct 的每个标签都是一个结构,每个都有一个名称和数据类型标签。 我正在尝试遍历每
假设我创建了以下 IDL 文件: module ProviderTest { interface Multiplier { long twice(in long number)
我有一个IDL文件,我使用scipy中的readsav将其导入Python,我更改了文件中的参数,我想将其导出/保存回原始格式,IDL可读。 这就是我导入它的方式: from scipy.io.idl
我正在尝试替换/删除文本文档中的一些行。该文档采用 ISO-8859-1 字符编码。 当我尝试将此行复制到我的 Python 脚本中进行替换时,它不会匹配。如果我缩短该行并删除直到第一个双引号 "它将
我的 Espresso 测试在 Espresso 版本 2.2.2 上运行良好,但是当我将我的工作室更新到最新版本并应用迁移规则时,测试将失败并需要更新版本。 库使用 androidTestImple
2013 年 4 月 15 日决议。 在 Windows 7(64 位)Windows 资源管理器中,当我右键单击 Python 文件并选择“使用 IDLE 编辑”时,编辑器会正确打开,但是当我运行(
我用的是3.8.10版本的Python.(32位)。我正在尝试在IDLE中导入NumPy包,但是我收到了这个消息。图像。我的Idle崩溃了,并显示以下信息。同样的事情也发生在其他包上,比如:Chain
IDL是什么意思?我用谷歌搜索了一下,发现它代表接口(interface)定义语言,用于组件的接口(interface)定义。但是,在实践中,IDL 的目的是什么?微软使用它吗? 最佳答案 接口(in
我是一名优秀的程序员,十分优秀!