Telegram Group & Telegram Channel
Вот за что я люблю Go, так это за то, что он чаще всего работает предсказуемо.

Если ты написал приложение, которое расходует нужное количество памяти, то можно быть уверенным что так будет в целом всегда и на любой операционной системе (если нет никаких завязок на что-то другое).

Плюс, компиляция в один статический бинарь в Go всё-таки удобнее сделана, потому что можно просто GOOS=linux GOARCH=amd64 go build и оно собереться и можно дальше или в distroless или в scratch контейнер прокидывать и всё будет замечательно.


Я в целом фанат статической линковки, ведь в контейнере тогда только бинарь и всё. В Расте же пришлось чтобы добиться этого то думать как это вообще можно собрать в статический бинарь.


В целом, всё решалось просто тем, что мы берем gcc-musl компилятор, который в отвязке от glibc может всё собрать вместе с флагами '-C target-feature=+crt-static’.

Однако OpenSSL библиотека скажет “давно пальцы веером, заюш” и откажется компилиться. Хоть в Расте и есть замена rustls но не все либы ее поддерживают и не везде есть нужные фича флаги, так что выкорчевать ее не получилось. Но можно ее втащить в Cargo с vendored фича флагом.

Вроде всё собралось и работало даже отлично какое-то время, но я думал, что musl может стрельнуть откуда-нибудь. Почитал какие есть минусы и все говорят, что в целом оно хоть и шустрое, но аллокация памяти у него хреновая. Ну я забил.

Однако, простое приложение, которое должно отжирать до 512 мегабайт оперативы решило жрать до 32 гигов и пришлось втаскивать jemalloc или mimalloc или еще что-нибудь другое более предсказуемое.

В итоге то, что должно было собраться без проблем решило еще повыпендриваться и не собираться, добавляя -m64 флаги для CC

В итоге после долгих попыток собрать всё это дело пришел к таким энвам, чтобы всё завелось


ENV CC=musl-gcc

ENV OPENSSL_NO_VENDOR=0 \
OPENSSL_STATIC=1 \
OPENSSL_DIR=/usr/local \
OPENSSL_LIB_DIR=/usr/local/lib \
OPENSSL_INCLUDE_DIR=/usr/local/include \
CARGO_NET_GIT_FETCH_WITH_CLI=true


ENV CFLAGS="-O2 -fPIC"
ENV SQLX_OFFLINE=true


ENV OPENSSL_BUILD_CPU=generic
ENV RUSTFLAGS='-C target-feature=+crt-static -C link-args='


А после переезда на jemalloc память стала использоваться нормально.



group-telegram.com/retired_on_fire/424
Create:
Last Update:

Вот за что я люблю Go, так это за то, что он чаще всего работает предсказуемо.

Если ты написал приложение, которое расходует нужное количество памяти, то можно быть уверенным что так будет в целом всегда и на любой операционной системе (если нет никаких завязок на что-то другое).

Плюс, компиляция в один статический бинарь в Go всё-таки удобнее сделана, потому что можно просто GOOS=linux GOARCH=amd64 go build и оно собереться и можно дальше или в distroless или в scratch контейнер прокидывать и всё будет замечательно.


Я в целом фанат статической линковки, ведь в контейнере тогда только бинарь и всё. В Расте же пришлось чтобы добиться этого то думать как это вообще можно собрать в статический бинарь.


В целом, всё решалось просто тем, что мы берем gcc-musl компилятор, который в отвязке от glibc может всё собрать вместе с флагами '-C target-feature=+crt-static’.

Однако OpenSSL библиотека скажет “давно пальцы веером, заюш” и откажется компилиться. Хоть в Расте и есть замена rustls но не все либы ее поддерживают и не везде есть нужные фича флаги, так что выкорчевать ее не получилось. Но можно ее втащить в Cargo с vendored фича флагом.

Вроде всё собралось и работало даже отлично какое-то время, но я думал, что musl может стрельнуть откуда-нибудь. Почитал какие есть минусы и все говорят, что в целом оно хоть и шустрое, но аллокация памяти у него хреновая. Ну я забил.

Однако, простое приложение, которое должно отжирать до 512 мегабайт оперативы решило жрать до 32 гигов и пришлось втаскивать jemalloc или mimalloc или еще что-нибудь другое более предсказуемое.

В итоге то, что должно было собраться без проблем решило еще повыпендриваться и не собираться, добавляя -m64 флаги для CC

В итоге после долгих попыток собрать всё это дело пришел к таким энвам, чтобы всё завелось


ENV CC=musl-gcc

ENV OPENSSL_NO_VENDOR=0 \
OPENSSL_STATIC=1 \
OPENSSL_DIR=/usr/local \
OPENSSL_LIB_DIR=/usr/local/lib \
OPENSSL_INCLUDE_DIR=/usr/local/include \
CARGO_NET_GIT_FETCH_WITH_CLI=true


ENV CFLAGS="-O2 -fPIC"
ENV SQLX_OFFLINE=true


ENV OPENSSL_BUILD_CPU=generic
ENV RUSTFLAGS='-C target-feature=+crt-static -C link-args='


А после переезда на jemalloc память стала использоваться нормально.

BY Андрей Журавлёв


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/retired_on_fire/424

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Recently, Durav wrote on his Telegram channel that users' right to privacy, in light of the war in Ukraine, is "sacred, now more than ever." As a result, the pandemic saw many newcomers to Telegram, including prominent anti-vaccine activists who used the app's hands-off approach to share false information on shots, a study from the Institute for Strategic Dialogue shows. To that end, when files are actively downloading, a new icon now appears in the Search bar that users can tap to view and manage downloads, pause and resume all downloads or just individual items, and select one to increase its priority or view it in a chat. He adds: "Telegram has become my primary news source." On Telegram’s website, it says that Pavel Durov “supports Telegram financially and ideologically while Nikolai (Duvov)’s input is technological.” Currently, the Telegram team is based in Dubai, having moved around from Berlin, London and Singapore after departing Russia. Meanwhile, the company which owns Telegram is registered in the British Virgin Islands.
from us


Telegram Андрей Журавлёв
FROM American