Ethernet Shield Freeze After about a month.

Hi all. i have a project and i get temp and send thingspeak server.it works well about a month. but after a while arduino blocked and can't send any field to server. i use clone wiznet ethernet shield and clone
arduino. i try to much things but always do same thing. if someone solved this problem please help me. thanks for reply. My code:

#include <OneWire.h>
#include <SPI.h>
#include <Ethernet.h>
#include<EEPROM.h>
int durum, durumson;
char thingSpeakAddress[] = "Thingspeakadress";
int resetPin = 6;
String writeAPIKey = "apikey";
OneWire  ds(2);
OneWire  ds_2(3);
float derece1;
float derece2;
int sayma1, sayma2, saymagoogle;
char s1[8];
char s2[8];
String c;
int sayi, sayma;
byte mac[] = { 0x80, 0x45, 0xCF, 0xD7, 0x9C, 0x33 };
byte mac2[] = { 0x1F, 0x9F, 0x6F, 0x18, 0xB2, 0x34 };
EthernetClient client;
void setup(void) {
  Serial.begin(9600);

  durum = EEPROM.read(0);
  delay(2000);
  Serial.println(durum);
  if (durum == 0) {
    EEPROM.write(0, 60);
    delay(1000);
    digitalWrite(resetPin, LOW);
    pinMode(resetPin, OUTPUT);
  }
  else {
    EEPROM.write(0, 0);
    delay(1000);
    digitalWrite(resetPin, HIGH);
    pinMode(resetPin, OUTPUT);

    sayma = 0;
    sayma1 = 0;
    sayma2 = 0;
    delay(6000);
    if (Ethernet.begin(mac2) == 0) {
      if (Ethernet.begin(mac) == 0) {
        digitalWrite(resetPin, LOW);
        pinMode(resetPin, OUTPUT);
      }
      /* Serial.println(durum);*/
    }
    else {
      saymagoogle = 0;
    }
  }
}

float ds1(float derece1) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
  }

  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  delay(1000);     // maybe 750ms is enough, maybe not
  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);         // Read Scratchpad
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  derece1 = celsius;
  return derece1;

}

/*float ds2(float derece2){
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds_2.search(addr)) {
   ds_2.reset_search();
   delay(250);
  }

  // the first ROM byte indicates which chip
  switch (addr[0]) {
   case 0x10:
     type_s = 1;
     break;
   case 0x28:
     type_s = 0;
     break;
   case 0x22:
     type_s = 0;
     break;
  }

  ds_2.reset();
  ds_2.select(addr);
  ds_2.write(0x44, 1);        // start conversion, with parasite power on at the end
  delay(1000);     // maybe 750ms is enough, maybe not
  present = ds_2.reset();
  ds_2.select(addr);
  ds_2.write(0xBE);         // Read Scratchpad
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
   data[i] = ds_2.read();
  }

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
   raw = raw << 3; // 9 bit resolution default
   if (data[7] == 0x10) {
     // "count remain" gives full 12 bit resolution
     raw = (raw & 0xFFF0) + 12 - data[6];
   }
  } else {
   byte cfg = (data[4] & 0x60);
   // at lower res, the low bits are undefined, so let's zero them
   if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
   else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
   else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
   //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  derece2=celsius;
  return derece2;

  }*/
void updateThingSpeak(String tsData)
{
  if (client.connect(thingSpeakAddress, 80))
  {
    client.print("POST /update HTTP/1.1\r\n");
    client.print("Host: thingspeakhost\r\n");
    client.print("Connection: close\r\n");
    client.print("User-Agent: tslib-arduino/1.3\r\n");
    client.print("X-THINGSPEAKAPIKEY: " + writeAPIKey + "\r\n");
    client.print("Content-Type: application/x-www-form-urlencoded\r\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\r\n\r\n");
    client.print(tsData);
    delay(2000);

    c = client.readStringUntil('\r');
    Serial.println();
    Serial.print("Gelen Veri:");
    Serial.print(c);
    delay(3000);

    if (c == "HTTP/1.1 200 OK") {
      saymagoogle = 0;
      c = "";
    }
    else {
      client.stop();
      saymagoogle = saymagoogle + 1;
    }
  }
  else {
    client.stop();
    saymagoogle = saymagoogle + 1;
  }
  if (saymagoogle > 2) {
    digitalWrite(resetPin, LOW);
    pinMode(resetPin, OUTPUT);
  }
}

void loop(void) {
  c = "";
  String tamyazi, yazi1, yazi2;
  yazi1 = "field1=";
  yazi2 = "&field2=";
  dtostrf((ds1(derece1)), 2, 2, s1);
  //dtostrf((ds2(derece2)),2,2,s2);
  //tamyazi= yazi1+ s1+ yazi2+ s2;
  tamyazi = yazi1 + s1;
  updateThingSpeak(tamyazi);
  delay(2000);
  client.stop();
  Serial.print("Google Saymasi= ");
  Serial.print(saymagoogle);
  if (saymagoogle > 2) {
    digitalWrite(resetPin, LOW);
    pinMode(resetPin, OUTPUT);
  }
  delay(100000);

}

Please use code tags (</> button on the toolbar) when you post code or warning/error messages. The reason is that the forum software can interpret parts of your code as markup, leading to confusion, wasted time, and a reduced chance for you to get help with your problem. This will also make it easier to read your code and to copy it to the IDE or editor. If your browser doesn't show the posting toolbar then you can just manually add the code tags:
[code]``[color=blue]// your code is here[/color]``[/code]
Using code tags and other important information is explained in the How to use this forum post. Please read it.

Please always do a Tools > Auto Format on your code before posting it. This will make it easier for you to spot bugs and make it easier for us to read. If you're using the Arduino Web Editor you will not have access to this useful tool but it's still unacceptable to post poorly formatted code. I recommend you to use the standard IDE instead.

Please describe the exact behavior you observe when it freezes.