Faits: A. En 1974, W._ SA (devenue depuis lors X._ SA; a donné en location à H.Y._ et F.Y._ un appartement de six pièces d'une surface de 174 m2 situé au deuxième étage de l'immeuble sis à la rue Charles-Sturm ..., à Genève. Depuis le 1er juillet 1994, le loyer, sans les charges, s'élève à 15'948 fr. par an, soit 1'329 fr. par mois, avec un taux hypothécaire de référence de 5,5 %. L'immeuble abritant l'appartement a été construit en 1893 et rénové en 1979; selon les locataires, la rénovation n'a concerné que la façade. Il est équipé du téléréseau collectif, d'un interphone, du chauffage central et d'un ascenseur. Le bâtiment, dont l'état général est bon, est situé en bordure du boulevard des Tranchées, artère enregistrant un trafic automobile intense. Il se trouve à proximité de commerces, de restaurants, des transports publics, d'écoles et de jardins publics. L'appartement comprend un hall d'entrée, des fenêtres à double vitrage, des installations électriques anciennes et des dépendances; la cuisine n'est ni agencée, ni équipée; le logement ne bénéficie pas d'un parking. Par avis officiel du 2 mars 2007, X._ SA a résilié le bail pour le 30 juin 2007. Le congé a été signifié pour des motifs économiques, afin de relouer l'appartement à un tiers pour un loyer supérieur. B. H.Y._ et F.Y._ ont saisi la Commission de conciliation d'une requête en annulation de congé. Non conciliée, l'affaire a été portée devant le Tribunal des baux et loyers du canton de Genève. Par jugement du 17 septembre 2008 rendu après instruction écrite, sans audition des parties et sans les enquêtes sollicitées par la bailleresse, le tribunal a annulé le congé. En substance, il a retenu qu'aucun des trente objets comparatifs présentés par la bailleresse n'était comparable à l'appartement dont le bail avait été résilié et, partant, que X._ SA n'avait pas démontré qu'elle pourrait relouer l'appartement à un tiers pour un loyer non abusif supérieur au loyer payé par les locataires actuels. Saisie par la bailleresse, la Chambre d'appel en matière de baux et loyers du canton de Genève a confirmé ce jugement par arrêt du 19 juin 2009. Sur les trente appartements présentés à titre d'objets comparatifs, la cour cantonale n'en a examiné que neuf, situés à proximité immédiate de rues comportant un trafic automobile important et dans un périmètre délimité par le boulevard des Tranchées, la rue de l'Athénée, la rue de Contamines et la rue Michel-Chauvet. Elle a d'emblée écarté les éléments de comparaison sis en dehors de ce périmètre au motif qu'ils se trouvaient dans un tissu urbain différent, comprenant des constructions plus récentes et offrant un caractère plus résidentiel. Pour le surplus, la Chambre d'appel est arrivée à la conclusion, pour des motifs divers, qu'aucun des neuf objets sis dans le périmètre défini n'était comparable avec l'appartement occupé par les époux Y._. C. X._ SA interjette un recours en matière civile. Elle conclut principalement à ce qu'il soit constaté que le bail a été valablement résilié avec effet au 30 juin 2007 et à ce qu'aucune prolongation de bail ne soit accordée aux locataires; à titre subsidiaire, elle demande le renvoi de la cause à la cour cantonale. H.Y._ et F.Y._ proposent principalement le rejet du recours; à titre subsidiaire, ils demandent le renvoi de la cause pour instruction complémentaire et, plus subsidiairement, une prolongation de bail de quatre ans. La cour de céans a délibéré sur le recours en séance publique.