Don't forget that RAM and program memory are completely different.Do you have large constant arrays or tables?
but I have many constant string for debugging by serial.print.
The smoking gun
I don't know how many print strings you've got (hint) but each one occupies RAM.
I thought that serial.print used the ROM and not RAM, but probably you are right,
Can someone explain?
Now I'm shortening all the messages in order to save a ton of bytes
You can put strings into PROGMEM, but you need to handle the printing yourself, but it is fairly simple.
Please enter a valid email to subscribe
We need to confirm your email address.
To complete the subscription, please click the link in the
email we just sent you.
Thank you for subscribing!
via Egeo 16