The number of Internet-connected devices is constantly increasing due to the growth of IoT. However, this results in a large volume of data transmission, which can cause issues with cloud-based storage and data processing due to inadequate bandwidth. This could lead to inadequacy of IoT; therefore, managing and storing data in such a way as not to cause the slightest delay in processing has become a major challenge in IoT. Both fog and cloud computing offer storage space, applications, and data for users, but fog computing is more geographically distributed and closer to the end-user, which increases system efficiency and reduces data transmission distance. Various QoS requirements of IoT services, distributed and heterogeneous nature of fog node computational capabilities make the application placement in Fog a challenging task. This paper proposes a solution that utilizes the Harris hawks optimization technique to monitor QoS requirements and available fog node capabilities to determine an efficient service placement plan. The proposed mechanism considers throughput, cost, and energy consumption as objective functions while meeting the QoS requirements of each IoT service. The simulation results obtained demonstrate that the proposed solution increases the resource usage and service acceptance ratio by 4.5% and 3.8%, respectively and reduces the service delay and the energy consumption by 2.95% and 1.62%, respectively compared with other state-of-the-art works.