如何配置AWS EC2实例运行osmium tags-filter并提升CPU利用率
问题背景
本地运行情况
设备:2023款MacBook Pro(Apple M2 Pro芯片、32GB内存)
工具:osmium tags-filter
操作:处理完整的planet-231002.osm.pbf文件,筛选保留含aeroway标签的节点/关系/路径
运行命令及结果:
(base) jarvis@MacBook-Pro-4 data % gtime -v osmium tags-filter planet-231002.osm.pbf aeroway -o planet-aeroways-231002-5.osm [======================================================================] 100% Command being timed: "osmium tags-filter planet-231002.osm.pbf aeroway -o planet-aeroways-231002-5.osm" User time (seconds): 1967.62 System time (seconds): 191.60 Percent of CPU this job got: 796% Elapsed (wall clock) time (h:mm:ss or m:ss): 4:31.04 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 3297744 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 7 Minor (reclaiming a frame) page faults: 956777 Voluntary context switches: 156 Involuntary context switches: 2594349 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 16384 Exit status: 0
本地耗时仅4.5分钟,工具充分利用多核CPU。
EC2运行情况
实例配置:debian-12-arm64-20230711-1438 AMI、c7g.large实例
osmium版本:
admin@ip-10-0-147-70:~$ osmium --version osmium version 1.15.0 libosmium version 2.18.0 Supported PBF compression types: none zlib lz4
运行相同操作时,进程启动超1小时,top显示CPU利用率从未超过8%(偶尔达20%),仅分配10分钟CPU时间,内存充足:
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.7 us, 0.2 sy, 0.0 ni, 44.4 id, 49.7 wa, 0.0 hi, 0.0 si, 0.0 MiB Mem : 3830.5 total, 3575.7 free, 274.2 used, 116.5 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 3556.3 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ 535 admin 20 0 180484 32704 4844 S 12.0 0.8 10:29.54
问题解答
1. 如何为osmium tags-filter进程分配更多CPU资源?
从top输出的49.7 wa(I/O等待占比)可以看出,当前瓶颈是磁盘I/O,而非CPU资源分配。可尝试以下操作:
- 调整进程优先级:使用
renice命令提升进程优先级,例如renice -n -10 -p 535,让系统优先给该进程分配CPU时间。 - 优化存储性能:c7g.large默认EBS卷I/O性能有限,可更换为gp3/io2等高IOPS卷,或把文件拷贝到实例本地NVMe存储,减少I/O等待。
- 清理后台进程:关闭不必要的后台服务,降低系统其他进程对CPU、I/O资源的占用。
- 确认多线程支持:osmium 1.15.0默认支持多核,但可检查编译时是否开启多线程(arm64版本通常默认开启)。
2. 增加vCPU数量是否有助于提升效率(本地为12核)?
当前I/O瓶颈未解决时,单纯增加vCPU不会明显提升效率——CPU多数时间在等待磁盘数据。但解决I/O问题后,增加vCPU会显著提升效率:
- osmium tags-filter是多核优化工具,本地796%的CPU利用率(约8核满负荷)已证明其能有效利用多核资源。
- 本地为12核,EC2 c7g.large仅2核,当I/O不再是瓶颈时,升级到8核/12核的c7g实例(如c7g.4xlarge/c7g.6xlarge),处理时间会大幅缩短。
- 注意:增加vCPU需匹配对应性能的存储,避免再次陷入I/O等待。
内容的提问来源于stack exchange,提问作者Jarvis
相关产品推荐
相关产品推荐

