Are you running your own while { ..; ros::spinOnce(); ..; } or are you using ros::spin()? If the former: be sure to add a ros::Rate::sleep() in there, or you basically have a busy-wait.