Network Functions Virtualization (NFV) replaces the conventional middleboxes by their software counterparts known as Virtual Network Functions (VNFs) which run on general-purpose hardware platforms and promise several benefits like reduced cost, ease of deployment, flexibility, etc. However, NFV faces some critical challenges as VNFs running on the same physical hardware still have to compete for shared resources such as Last Level Cache (LLC) and different levels of Memory Bandwidth (MB) (between L2 cache & LLC and LLC & main memory), which might result in unpredictable and variable performance interference to the co-located VNFs deployed. Some recent works have explored mechanisms for allocating LLC dynamically using Cache Allocation Technology (CAT) but they did not look into MB contentions among the co-located VNFs. Dynamic allocation of both LLC and MB to the co-located VNFs remains unexplored. To address this, in this work, by leveraging Intel’s CAT and Memory Bandwidth Allocation (MBA) technologies, we profile different VNFs to determine their minimum LLC and MB resource requirements to achieve performance isolation for different input traffic rates. We then propose a dynamic, joint resource allocation scheme, RESTRAIN, that takes each VNF’s input traffic rate as an input and dynamically adjusts LLC ways and MB resources allocated among them to avoid performance interference and thereby improves the overall resource utilization of the underlying hardware system and the number of VNFs meeting their QoS guarantees. Experimental results on a prototype system show that the proposed RESTRAIN scheme guarantees performance isolation. Further, it improves performance by 30% over a static allocation mechanism and 17% over ResQ, a state-of-the-art scheme.