Port exaustion occurs when the FortiGate can't open a particular port, for NAT.
When traffic passes through the FortiGate it has a source/destination port.
When the FortiGate does NAT, that source port (3345) gets randomized so the new packet becomes (interface IP):(random port)->192.168.1.5:80
This is also how a reply packets from different internal hosts are figured out(2 people going out will use the same source IP but use different source ports).
There are 65,000 ports per IP and the FortiGate reserves half for TCP and half for UDP.
If you use fixed port on your NAT policies and then the FortiGate won't be allowed to change the source port. So 2 packets with the same source port will cause this.
Some firmware versions have had bugs with this, so try looking at the release notes for new versions. I can't remember which versions were effected.
If the message is not in error, then you're hitting the transfer limits. Lowering session timers could help, or setting up multiple outbound IPs through an IP pool would be options.