Ich habe eine Rails 4.2-Anwendung auf Heroku läuft, wird Ruby-Version 2.2.4Warum ist mein Heroku App Speicherbedarf so groß
Wenn ich die Anwendung neu starten, Heroku's log-Runtime-Metriken die App-Protokolle verwenden dies:
sample#memory_total=102.07MB
sample#memory_rss=102.06MB
sample#memory_cache=0.00MB
sample#memory_swap=0.00MB
sample#memory_pgpgin=29936pages
sample#memory_pgpgout=3807pages
sample#memory_quota=512.00MB
ein einfacher Klick auf eine diferent Seite in der Landung der App meldet diese Details:
sample#memory_total=267.07MB
sample#memory_rss=265.63MB
sample#memory_cache=1.43MB
sample#memory_swap=0.00MB
sample#memory_pgpgin=109878pages
sample#memory_pgpgout=41509pages
sample#memory_quota=512.00MB
Oink berichtet: Speichernutzung: 435.416
Eingabe der App ich einige Datentabellen mit Paginierung haben, wenn sie um die Seiten der Speicher bewegt wird immer größer:
sample#memory_total=349.68MB
sample#memory_rss=348.18MB
sample#memory_cache=1.50MB
sample#memory_swap=0.00MB
sample#memory_pgpgin=159122pages
sample#memory_pgpgout=69604pages
sample#memory_quota=512.00MB
Oink in diesem Moment Berichterstattung: Speichernutzung: 602352
Wenn ich ein gehen einfachere Seite auf der App Heroku berichtet:
sample#memory_total=353.05MB
sample#memory_rss=351.51MB
sample#memory_cache=1.54MB
sample#memory_swap=0.00MB
sample#memory_pgpgin=169306pages
sample#memory_pgpgout=78924pages
sample#memory_quota=512.00MB
Oink berichtet Nutzung Speicher: 604744
Nach 5 Minuten Heraku-Bewegung meldet sich der Speicher insgesamt zwischen 360 und 400+ MB. Es kommt nicht zu Speicherquotefehlern, aber wenn ein neuer Webarbeiter gefeuert würde, wette ich, dass es das tun würde.
Ich habe auch einige Daten aus ObjectSpace genommen. Navigieren Sie um die Website (dieses Mal in lokalen), zuerst mit den einfachsten Seiten, dann die Eingabe des Teils mit Seitenumbruch mit holt mehr Daten, ausgehen und so. Dies sind einige der Protokolle von ObjectSpace.count_objects:
{: TOTAL => 556379,: FREI => 1142,: T_OBJECT => 27740,: T_CLASS => 7356,: T_MODULE => 1563,: T_FLOAT => 9,: T_STRING => 241807,: T_REGEXP => 2481,: T_ARRAY => 92685,: T_HASH => 16081,: T_STRUCT => 1118,: T_BIGNUM => 13,: T_FILE => 117,: T_DATA => 81408, : T_MATCH => 6132,: T_COMPLEX => 1: T_RATIONAL => 909: T_SYMBOL => 1691: T_NODE => 62347,: T_ICLASS => 11779}
{: TOTAL => 556379,: FREE = > 1211,: T_OBJECT => 27540,: T_CLASS => 7354,: T_MODUL => 1565,: T_FLOAT => 9,: T_STRING => 241100,: T_REGEXP => 2478,: T_ARRAY => 93344,: T_HASH => 16763 ,: T_STRUCT => 1078,: T_BIGNUM => 13,: T_FILE => 122,: T_DATA => 81422,: T_MATCH => 6031,: T_COMPLEX => 1,: T_RATIONAL => 911,: T_SYMBOL => 1690,: T_NODE => 61968,: T_ICLASS => 11779}
{: TOTAL => 556379,: FREI => 946,: T_OBJECT => 24257,: T_CLASS => 7523,: T_MODUL => 1565,: T_FLOAT => 9,: T_STRING => 251448,: T_REGEXP => 2362,: T_ARRAY => 83078,: T_HASH => 15272,: T_STRUCT => 1175,: T_BIGNUM => 63,: T_FILE => 128,: T_DATA => 89152,: T_MATCH => 5952,: T_COMPLEX => 1, MIT PAGINATION, 25 Datensätze pro Seite, abzurufenden Daten enthält einzigartige Strings (Adressen in FACT) T_ICLASS => 11801}
EINGEBEN DataTables-: T_RATIONAL => 963: T_SYMBOL => 2028: T_NODE => 58656,.
{: TOTAL => 556379,: FREE => 906: T_OBJECT => 26280,: T_CLASS => 7363,: T_MODULE => 1563: T_FLOAT => 9: T_STRING => 252024,: T_REGEXP = > 2474,: T_ARRAY => 87445,: T_HASH => 15347,: T_STRUKT => 1144,: T_BIGNUM => 16,: T_FILE => 133,: T_DATA => 80601,: T_MATCH => 6686,: T_COMPLEX => 1 ,: T_RATIONAL => 985,: T_SYMBOL => 1690: T_NODE => 59906,: T_ICLASS => 11806}
{: TOTAL => 556379,: FREE => 146,: T_OBJECT => 18752,: T_CLASS => 7359,: T_MODULE => 1563,: T_FLOAT => 9,: T_STRING => 295002,: T_REGEXP => 2304,: T_ARRAY => 81885,: T_HASH => 13791,: T_STRUCT => 867,: T_BIGNUM => 15,: T_FILE => 11,: T_DATA => 77634,: T_MATCH => 847,: T_COMPLEX => 1,: T_RATIONAL => 1251,: T_SYMBOL => 1679,: T_NODE => 41463,: T_ICLASS => 11800}
{: TOTAL => 571870,: FREI => 433,: T_OBJECT => 19352,: T_CLASS => 7369,: T_MODUL => 1565,: T_FLOAT => 9,: T_STRING => 294098,: T_REGEXP => 2358, : T_ARRAY => 91079,: T_HASH => 14983,: T_STRUCT => 879,: T_BIGNUM => 15,: T_FILE => 16,: T_DATA => 77945,: T_MATCH => 1128,: T_COMPLEX => 1,: T_RATIONAL => 1591: T_SYMBOL => 2028: T_NODE => 45197,: T_ICLASS => 11824}
{: TOTAL => 628109,: FREE => 343,: T_OBJECT => 20647,: T_CLASS => 7360 ,: T_MODULE => 1563,: T_FLOAT => 9,: T_STRING => 318169,: T_REGEXP => 2346,: T_ARRAY => 115854,: T_HASH => 17767,: T_STRUCT => 949,: T_BIGNUM => 15,: T_FILE => 10,: T_DATA => 79152,: T_MATCH => 1243,: T_COMPLEX => 1,: T_RATIONAL => 1789,: T_SYMBOL => 1685,: T_NODE => 47405,: T_ICLASS => 11802}
{: TOTAL => 727564,: FREI => 470,: T_OBJECT => 22820,: T_CLASS => 7361,: T_MODUL => 1563,: T_FLOAT => 9,: T_S TRING => 362350,: T_REGEXP => 2390,: T_ARRAY => 152959,: T_HASH => 22342,: T_STRUKT => 1035,: T_BIGNUM => 33,: T_FILE => 11,: T_DATA => 81286,: T_MATCH = > 2167,: T_COMPLEX => 1,: T_RATIONAL => 2497,: T_SYMBOL => 1686,: T_NODE => 54779,: T_ICLASS => 11805}
{: TOTAL => 811122,: FREI => 392, : T_OBJECT => 24361,: T_CLASS => 7362,: T_MODUL => 1563,: T_FLOAT => 9,: T_STRING => 409740,: T_REGEXP => 2434,: T_ARRAY => 176571,: T_HASH => 25118,: T_STRUCT => 1076,: T_BIGNUM => 51,: T_FILE => 13,: T_DATA => 82701,: T_MATCH => 2858,: T_COMPLEX => 1,: T_RATIONAL => 3093,: T_SYMBOL => 1686,: T_NODE => 60285,: T_ICLASS => 11808}
VERLäßT JETZT Tables und Paginierung einer einfachere SEITE IM APP
{: TOTAL => 81968 1,: FREI => 494,: T_OBJECT => 24601,: T_CLASS => 7374,: T_MODUL => 1563,: T_FLOAT => 9,: T_STRING => 413540,: T_REGEXP => 2437,: T_ARRAY => 178899, : T_HASH => 25953,: T_STRUCT => 1118,: T_BIGNUM => 93,: T_FILE => 14,: T_DATA => 83043,: T_MATCH => 2924,: T_COMPLEX => 1,: T_RATIONAL => 3121,: T_SYMBOL => 1688: T_NODE => 60999,: T_ICLASS => 11810}
ich kann auch gc Profiler Daten. Aber was mich beunruhigt ist, dass die meisten der gemeldeten Daten und zugeteilten Sachen aus Edelsteinen stammen, die benötigt werden und ich sowieso brauche.
So ...
Ich bin auf dem Weg versuchen, Speicherlecks zu erkennen, oder den Grund, warum Speicherbedarf so hoch ist, und reduzieren so viel wie ich kann. Alle Hinweise, wie Sie von hier aus vorgehen, sind willkommen.
Es wäre nett zu verstehen, warum nach einem ersten Klick - nach dem Neustart - der gemeldete Speicher von Heroku verdoppelt, obwohl ich mir vorstelle, dass es danach ist, wenn die meisten Objekte konstruiert und Speicher zugewiesen werden.
Aber dann ist der Unterschied zwischen dem, was Oink berichtet und dem, was Heroku berichtet, riesig, denke ich Oink berichtet in Bytes. Und wieder stelle ich mir vor, dass sie verschiedene Dinge berichten, oder zumindest berichtet Heroku über viel mehr Zeug.
Haben Sie gute Tipps, wie Sie all diese Daten interpretieren können? Ist es nicht ein Speicherbedarf von 300-400 MB zu viel für eine Heroku App?
Danke.