[squeak-dev] Server timeouts and 504 return codes

Eliot Miranda eliot.miranda at gmail.com
Tue Jan 29 00:57:08 UTC 2019

Hi Tobias,

> On Jan 28, 2019, at 12:04 AM, Tobias Pape <Das.Linux at gmx.de> wrote:
> Hi,
>> On 28.01.2019, at 03:45, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> […]
>>>> By "the image" I assume you mean the SqueakSource server image.  But
>>>> opening the file takes very little time.  Original web-sites were
>>>> .html files, remember how fast those were?  Plus, filesystems "cache"
>>>> file contents into their own internal caches anyway...
>>> Each file uses one external semaphore, each socket uses three. If you use a default image, there can be no more than 256 external semaphores which is ridiculous for a server, and it'll just grind to a halt when some load arrives. Every time the external semaphore table is full, a GC is triggered to try clear it up via the finalization process.
>>> Reading a file into memory is slow, writing it to a socket is slow.
>>> (Compared to nginx which uses sendfile to let the kernel handle that).
>>> And Squeak can only use a single process to handle everything.
>> That’s configurable.  Alas because writing lock-free table growth is not easy the external semaphore table doesn’t grow automatically.  But the vm does allow its size to be specified in a value cached in the image header and read at startup (IIRC).  So we could easily have a 4K entry external semaphore table.
> […] 
> Eliot, can you give an example invocation so we can add that to the server?

Im on my phone in the car right now do I can’t confirm, but IIRC it is an image save thing.  You specify the size via a vmParameterAt:put: send which updates the size but if you save the image that size is remembered in the image file header.  I need to check but the info should be in the comments for vmParameterAt:[put:]

> -t

More information about the Squeak-dev mailing list