Faits: A. Le 9 décembre 1974, X._ SA a remis à bail à Z.Y._ un appartement de six pièces, avec cave, au 4e étage d'un immeuble, à Lausanne. Selon les constatations du jugement de première instance auxquelles se réfère la cour cantonale, l'appartement a une surface de 141 m2. Le bâtiment date des années 1925/1926. Le loyer a été fixé en dernier lieu à 1'277 fr. nets par mois. Un bail complémentaire a été conclu entre les parties le 27 août 1976 portant sur un local de 7 m2 dans le même immeuble, destiné à des archives, dont le loyer s'est élevé en dernier lieu à 70 fr. par mois. Z.Y._ est décédé le 10 février 2005. Ses fils, A.Y._ et B.Y._, ont manifesté la volonté de reprendre les baux conclus par leur père. Sur formule officielle du 23 juin 2005, adressée séparément à A.Y._ et B.Y._, X._ SA a résilié le bail de l'appartement pour le 1er octobre 2005. Elle a par ailleurs résilié le bail relatif au local de 7 m2, sur formule officielle du 4 octobre 2005, pour le 1er mars 2006. La bailleresse a expliqué qu'elle avait l'intention de relouer cet appartement, après rénovation, pour un loyer supérieur. B. Par requête du 14 décembre 2005 dirigée contre X._ SA et adressée au Tribunal des baux du canton de Vaud, A.Y._ et B.Y._ ont conclu à l'annulation des résiliations, subsidiairement à la prolongation des baux. Par jugement du 5 avril 2006, le Tribunal des baux a annulé les résiliations notifiées aux frères Y._. Par arrêt du 11 avril 2007, la Chambre des recours du Tribunal cantonal vaudois a annulé cette décision et ordonné une nouvelle instruction. La Présidente du Tribunal des baux a alors invité la bailleresse à fournir les pièces permettant un calcul de rendement, précisant que les parties étaient libres de produire aussi des éléments comparatifs en vue d'établir si le loyer pouvait ou non être augmenté. Par la suite, le tribunal a procédé à une inspection locale portant sur l'appartement litigieux et différents immeubles proposés en comparaison. La bailleresse a produit des pièces en relation avec les appartements présentés à titre de comparaison. Par jugement du 15 octobre 2008, le Tribunal des baux a derechef annulé les résiliations litigieuses. Il a constaté que la bailleresse n'avait pas produit les pièces permettant un calcul de rendement et qu'elle n'avait pas présenté suffisamment d'éléments de comparaison admissibles pour établir le loyer usuel dans le quartier; il en a déduit qu'il n'était pas démontré de manière satisfaisante que la bailleresse pourrait obtenir d'un autre locataire un loyer plus élevé qui ne serait pas abusif. Ce jugement a été confirmé par un arrêt de la Chambre des recours rendu le 29 avril 2009. C. X._ SA exerce un "recours en nullité et en réforme" au Tribunal fédéral. Invoquant la violation de diverses dispositions de droit fédéral et cantonal, elle conclut à l'annulation de l'arrêt attaqué et au renvoi de la cause à l'autorité cantonale, subsidiairement à la validation des résiliations et à la fixation d'un ultime délai au 1er octobre 2010 pour restituer les locaux. Les intimés proposent l'irrecevabilité du recours, subsidiairement son rejet.