# CGroup Enforcement
## CGroups in Storm
Storm 使用 CGroup 來限制 worker 的資源使用, 以保證公平和 QOS.
**請注意:CGroups 目前僅支持 Linux 平臺(內核版本 2.6.24 及更高版本)**
## 設置
要使用 CGroups, 請確保正確安裝 cgroups 并配置 cgroup.有關設置和配置的更多信息, 請訪問:
[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Using_Control_Groups.html](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Using_Control_Groups.html)
一個 示例/默認 的 cgconfig.conf 文件 <stormroot>/conf 目錄. 內容如下:</stormroot>
```
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/storm_resources;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/storm_resources;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio = /cgroup/blkio;
}
group storm {
perm {
task {
uid = 500;
gid = 500;
}
admin {
uid = 500;
gid = 500;
}
}
cpu {
}
}
```
有關 cgconfig.conf 文件的格式和配置的更詳細說明, 請訪問:
[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Using_Control_Groups.html#The_cgconfig.conf_File](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Using_Control_Groups.html#The_cgconfig.conf_File)
## 與 Storm 中的 CGroup 相關的設置
| 設置 | 功能 |
| --- | --- |
| storm.cgroup.enable | 此配置用于設置是否使用 cgroup.設置 "true" 以啟用 cgroups 的使用.設置 "false" 不使用 cgroups.當該配置設置為 false 時, 將跳過與 cgroup 相關的單元測試.默認設置為 "false" |
| storm.cgroup.hierarchy.dir | 到風暴將使用的 cgroup 層次結構的路徑.默認設置為 "/cgroup/storm_resources" |
| storm.cgroup.resources | 將由 CGroups 監管的子系統列表.默認設置為 cpu 和內存.目前只支持 cpu 和內存 |
| storm.supervisor.cgroup.rootdir | supervisor 使用的根 cgroup.cgroup 的路徑將是 <storm.cgroup.hierarchy.dir>/<storm.supervisor.cgroup.rootdir>.默認設置為 "storm" |
| storm.cgroup.cgexec.cmd | 用于在 cgroup 中啟動工作的 cgexec 命令的絕對路徑.默認設置為 "/bin/cgexec" |
| storm.worker.cgroup.memory.mb.limit | 每個 worker 的內存限制為MB.這可以基于每個 supervisor 節點設置.該配置用于設置 cgroup config memory.limit_in_bytes.有關 memory.limit_in_bytes 的更多詳細信息, 請訪問:[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-memory.html.請注意](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-memory.html.%E8%AF%B7%E6%B3%A8%E6%84%8F), 如果您使用資源感知計劃程序, 請不要設置此配置, 因為此配置將覆蓋資源意識計劃程序計算的值 |
| storm.worker.cgroup.cpu.limit | 每個 worker 的cpu份額.這可以基于每個 supervisor 節點設置.此配置用于設置 cgroup config cpu.share.有關 cpu.share 的更多詳細信息, 請訪問:[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-cpu.html.請注意](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-cpu.html.%E8%AF%B7%E6%B3%A8%E6%84%8F), 如果您使用資源感知調度程序, 請不要設置此配置, 因為此配置將覆蓋資源意識計劃程序計算的值 |
由于通過 cpu.shares 限制 CPU 使用率僅限制進程的 CPU 占用比例, 以限制 supervisor 節點上所有 worker 進程的CPU使用量, 請設置config supervisor.cpu.capacity. 其中每個增量代表核心的1%, 因此如果用戶設置 supervisor.cpu.capacity: 200, 則用戶指示使用2個內核.
## 與資源意識調度程序集成
CGroup 可以與資源意識調度程序一起使用. 然后, CGroup 將強制資源意識調度程序分配的 worker 的資源使用情況. 要將資源感知計劃程序使用 cgroup, 只需啟用 cgroups, 并確保不要設置 storm.worker.cgroup.memory.mb.limit 和 storm.worker.cgroup.cpu.limit 配置.
- Storm 基礎
- 概念
- Scheduler(調度器)
- Configuration
- Guaranteeing Message Processing
- 守護進程容錯
- 命令行客戶端
- Storm UI REST API
- 理解 Storm Topology 的 Parallelism(并行度)
- FAQ
- Layers on Top of Storm
- Storm Trident
- Trident 教程
- Trident API 綜述
- Trident State
- Trident Spouts
- Trident RAS API
- Storm SQL
- Storm SQL 集成
- Storm SQL 示例
- Storm SQL 語言參考
- Storm SQL 內部實現
- Flux
- Storm 安裝和部署
- 設置Storm集群
- 本地模式
- 疑難解答
- 在生產集群上運行 Topology
- Maven
- 安全地運行 Apache Storm
- CGroup Enforcement
- Pacemaker
- 資源感知調度器 (Resource Aware Scheduler)
- 用于分析 Storm 的各種內部行為的 Metrics
- Windows 用戶指南
- Storm 中級
- 序列化
- 常見 Topology 模式
- Clojure DSL
- 使用沒有jvm的語言編輯storm
- Distributed RPC
- Transactional Topologies
- Hooks
- Storm Metrics
- Storm 狀態管理
- Windowing Support in Core Storm
- Joining Streams in Storm Core
- Storm Distributed Cache API
- Storm 調試
- 動態日志級別設置
- Storm Logs
- 動態員工分析
- 拓撲事件檢查器
- Storm 與外部系統, 以及其它庫的集成
- Storm Kafka Integration
- Storm Kafka 集成(0.10.x+)
- Storm HBase Integration
- Storm HDFS Integration
- Storm Hive 集成
- Storm Solr 集成
- Storm Cassandra 集成
- Storm JDBC 集成
- Storm JMS 集成
- Storm Redis 集成
- Azue Event Hubs 集成
- Storm Elasticsearch 集成
- Storm MQTT(Message Queuing Telemetry Transport, 消息隊列遙測傳輸) 集成
- Storm MongoDB 集成
- Storm OpenTSDB 集成
- Storm Kinesis 集成
- Storm Druid 集成
- Storm and Kestrel
- Container, Resource Management System Integration
- Storm 高級
- 針對 Storm 定義一個不是 JVM 的 DSL
- 多語言協議
- Storm 內部實現
- 翻譯進度