LINUX.ORG.RU

Сообщения olegd

 

Жаба ест память

Есть сервер. На нём крутятся PostgreSQL, Mongo, самописные числодробильные микросервисы, Keycloak и ActiveMQ, через который они все координируются. Когда пользователей много, запускается много экземпляров микросервисов. Память подходит к концу.

Вопрос: угадайте, кого прибьют первым по OOM?

Ответ: ActiveMQ (1G), затем Keycloak (500M). Все остальные потребляют меньше памяти.

 , ,

olegd
()

Скачать всю очередь ActiveMQ Classic

Есть сервер ActiveMQ Classic. На нём висит очередь из 1000 сообщений. Требуется просмотреть их и вдумчиво разобраться, отчего некоторые вводят сервер приложений в ступор.

Но одновременно нужно продолжать работать. Для этого надо срочно всё удалить.

Можно руками скопировать каждое сообщение из веб-интерфейса. Можно вдумчиво прочитать всю тысячу (в веб-интерфейсе они выглядят как длиииннная строка JSON) и скопировать только нужные. Можно слепить скрипт, чтобы скопировать все эти сообщения.

А существует ли готовый инструмент для этой цели? Прочитать все сообщения в заданной очереди (не отмечая их как доставленные, либо наоборот, отмечая) и сохранить в текстовый файл.

 

olegd
()

Посоветуйте читалку

Чем вы пользуетесь для чтения книг со смартфона? Требуется масштабирование в широких пределах и поддержка основных форматов: FB2, EPUB, DJVU, PDF, CBZ. Совсем хорошо, если есть CBR, MOBI, AWX3 и reflow в PDF.

Ebook Droid ограничивает увеличение шрифта.

FBReader имеет неотключаемую фичу – добавляет дефис при переносе строк. Очень коварная вещь в математических формулах и текстах программ.

Что ещё знаете?

 ,

olegd
()

grep и кеширование

Есть программа, которая иногда ест много памяти. Потребление памяти ею можно отслеживать командой top -b -d60 -o +%MEM -c | grep memory_eater | grep -v grep > memory.log & disown Но иногда она быстро отрабатывает – за несколько минут, и файл остаётся пустой. В чём проблема? Слишком малый объём текста зависает в кеше и не сбрасывается? Можно ли как-то ускорить сбрасывание?

P.S. Если увеличить частоту опроса top до -d1 или -d0.1, всё важное фиксируется, но лог увеличивается на 2-3 порядка. Реально достаточно писать раз в минуту. Вопрос не в том, как отслеживать память, а как записать этот лог в файл.

Ответ:

top -b -d60 -o +%MEM -c | grep --line-buffered memory_eater | grep -v --line-buffered grep > memory.log & disown

или

top -b -d60 -o +%MEM -c | stdbuf -o0 -i0 grep memory_eater | stdbuf -o0 -i0 grep -v grep > memory.log & disown

 ,

olegd
()

Etc/GMT+3 и Etc/GMT-3

Менял часовые пояса под RedHat, столкнулся со странным обозначением часовых поясов. Etc/GMT+3 соответствует времени GMT - 3 часа (восток Бразилии), а Etc/GMT-3 соответствует GMT + 3 ч (Москва, Минск, Стамбул):
https://utctime.info/timezone/Etc--GMT-3/
https://utctime.info/timezone/Etc--GMT+3/

Откуда взялись такие обозначения?

Ответ: из AIX.

 

olegd
()

Как убрать предупреждения о загрузке директории?

Гружу большой архив файлов (копившийся лет 30) в веб-форму. Всё сразу нельзя – слишком большой, бэкэнд захлебнётся и упадёт (пробовали). Нужно по одной директории, которых десятки. После каждой приходит предупреждение:

Are you sure you want to upload all files from “<директория>”? Only do this if you trust the site.

Не то, чтобы мешает, но надоело. Как-то убрать это предупреждение можно? Firefox 129.

 

olegd
()

Как положено обрабатывать статус 301?

Сабж. Есть самописный клиент для работы с облаком Амазона, использующий рекомендованную Амазоном библиотеку. Когда пользователь прописал неверный сервер в клиенте, сервер возвращает статус 301. Обязан ли клиент автоматически перейти по указанному адресу?

 

olegd
()

Windows отказывается подключать KRDC с /media

При подключении к виндовой машине по RDP с использованием KRDC можно расшарить директорию на линуксовой машине (по умолчанию – /media) для обмена файлами через неё. Но с последними апдейтами Windows 11 и Server 2022 новым пользователям это по умолчанию запретили. Соединение устанавливается и тут же отваливается. (Без /media работает нормально.) Чтобы обмениваться файлами с линуксом, нужно включить какие-то политики.

Что именно нужно включить? Или хотя бы по каким словам гуглить?

 ,

olegd
()

Даты в Питоне

Есть набор текстовых дат вида «14.05.24 17:22:40.653». Нужно вычислить разности по времени между ними и вывести в наглядном виде «сутки:часы:минуты:секунды.доли».

Преобразовать текст в дату несложно: datetime.datetime.strptime(date_time_string, '%d.%m.%y %H:%M:%S.%f')
В секунды с начала эпохи аналогично: datetime.datetime.strptime(date_time_string, '%d.%m.%y %H:%M:%S.%f').timestamp()

Но есть ли готовая функция, чтобы преобразовать разность в секундах в сутки-часы-минуты?

Что разность двух datetime.datetime имеет тип datetime.timedelta – знаю. Но datetime.timedelta не имеет готовых методов для выделения часов и минут.

Ответ: datetime.timedelta имеет метод __str__():

>>> str(datetime.timedelta(days=4, seconds=3729, microseconds=823089))
'4 days, 1:02:09.823089'

Но учитывая, что для 0 суток ползёт форматирование, для единообразия таблицы придётся брать
f'{d.days:02}:{d.seconds // 3600:02}:{d.seconds % 3600 // 60:02}:{d.seconds % 60:02}.{d.microseconds:06}'

 ,

olegd
()

Сортировка текстовых строк в SQL

Есть список файлов в таблице в PostgreSQL или SQLite. Команда select file,status from files order by file; выводит в таком порядке:

   file       | status
--------------+--------
 scan/79.txt  |      0
 scan/8.txt   |      0
 scan/80.txt  |      0
 scan/88.txt  |      0
 scan/89.txt  |      0
 scan/9.txt   |      0
 scan/90.txt  |      0
 scan/91.txt  |      0

А мне надо сортировать числа в середине строк по возрастанию: 8-9-79-80-… Можно ли это сделать средствами SQL? Как такая сортировка называется?

Ответ: «natural sort order» – «естественная». Для Postgre нашлось готовое решение:

CREATE COLLATION numeric (provider = icu, locale = 'en-u-kn-true');
SELECT * FROM files ORDER BY file COLLATE numeric;

Для sqlite3 пока нашёл только советы, как писать расширение на Си.

Или можно вычленить числа, преобразовать в числовой формат и сортировать по ним:
SELECT * FROM files ORDER BY CAST(REPLACE(SUBSTR(file, 6), '.txt', '') AS int);

 , ,

olegd
()

curl, HTTP POST и Content-Type

Есть закрыто-несвободная программа, которой можно управлять через REST API. Пробовал curl – POST не работал. Попробовал Insomnia (https://github.com/Kong/insomnia) – часть вариантов заработала. Судя по всему, принимает только если Content-Type установлен в «application/json», «application/xml», «text/plain». Проблема в том, что curl --data и curl --data-ascii задают «Content-Type: application/x-www-form-urlencoded», даже в случае curl --data-ascii @file.txt. То же для --data-binary, --data-raw и --data-urlencode.

Переопределять MIME-тип данных при помощи -H можно, но неудобно. Есть ли у curl команда, чтобы постить текстовые данные?

Или это похоже на баг в curl, и --data-ascii должно задавать другой тип?

Ответ: пока предложили --json, который подставляет в хедер "Content-Type: application/json" и "Accept: application/json"

 , ,

olegd
()

Как вести лог потребления памяти программой?

На удалённой машине (подключаюсь по ssh, сессия часто рвётся) выполняется несколько экземпляров программы memory_eater. Требуется записать в файл, сколько какой потребляет памяти. Пока я пользуюсь командой:

top -b -d60 -c | grep memory_eater > memory.log & disown

Главный недостаток – в лог попадает команда grep. top -b -d60 -c | grep memory_eater | grep -v grep > memory.log & disown выглядит громоздко.

Кроме того, хотелось бы, чтобы каждая запись или каждая строка имела дату и время.

Если будете предлагать другие программы – желательно то, что обычно стоит в системах по умолчанию.

 ,

olegd
()

Машина с OpenSuse постоянно меняет адреса

Есть удалённая машина на сервере виртуальных машин VMWare. OpenSUSE Leap 15.5. Подключаюсь к ней через ssh, но соединение часто виснет и рвётся с ошибкой «client_loop: send disconnect: Broken pipe». Насколько я могу судить, это происходит от того, что сам собой меняется IP-адрес, каждые минут 5. Как это прекратить?

Погуглил – увидел упоминание увеличения DHCP lease. Дело в нём? Как увеличить это время? GUI отсутствует, yast только консольный, Wicked без NetworkManager.

И почему другие линуксы с DHCP в той же сети постоянно берут одинаковые IP?

Дополнение: Проблема возникает только когда в локальной сети более одной виртуальной машины из этого темплейта. MAC-адреса различаются. Имена машин различаются.

 , ,

olegd
()

sh или bash?

Есть ли где-нибудь простой и понятный список вещей, которые можно писать в скриптах на bash, но нельзя на голом sh? Помимо двойных скобок.

Ответ: Проверяется скриптами checkbashisms (пакет devscripts) или shellcheck.

В данную секунду интересует скрипт:

for f in somedir/*
do
    echo $f
    ./a.out -Q"$f"
    wait $!
done

Особенно интересует строка wait $!. Вроде, в документации dash такого нет, но скрипт работает.

Ответ: Есть. Просто мануал не предназначен для поиска по ключевым словам. Его положено запоминать целиком.

Перемещено hobbit из general

 , ,

olegd
()

Как можно подключаться к виндовой шаре?

На сервере Windows Server 2022 открыта для всеобщего доступа без логина и пароля директория. \\192.168.3.4\shared Всё принадлежит пользователю Everyone с правами на чтение и запись.

Вопрос: как можно проверить её доступность из-под Линукса помимо sudo mount.cifs //192.168.3.4/shared/ ~/mountpoint/ ? С curl и mc ничего не получилось.

Ответ: Пока предложили smbclient (samba-client в RHEL, net-fs/samba[client] в Gentoo). Жду ответов от знатоков MC и cURL.

 ,

olegd
()

Часы в Midnight Commander

Понадобилось работать в консоли по ssh и время от времени проверять, что время на удалённой машине не глючит. Хотел включить в MC часы, но не нашёл.

В нортоне были, в ФАРе есть, для MC нашёл кучу описаний, как ставить патчи, а в основной ветке MC есть?

Для определённости – mc-4.8.26-5 под RHEL9.

 

olegd
()

Как PostgreSQL хранит и дампит время?

Таблица в дампе задаётся командой:

CREATE TABLE schema1.files (
    t1 timestamp without time zone NOT NULL,
    t2 timestamp without time zone NOT NULL,
    name text NOT NULL,
    size integer,
    status integer DEFAULT 0
);

В каком часовом поясе будет показывать t1 и t2 в psql в консоли? В каком часовом поясе сохранит их pg_dump? Влияет ли на это значение LC_ALL?

 ,

olegd
()

Может ли завершиться успешно команда, на которую ответило ошибкой 4xx?

Объясните, пожалуйста, правила для REST API. В каких случаях должно выдавать какие ошибки?

Есть сервер, на котором крутится задача, которая будет там крутиться ещё несколько минут. Или часов. Приходит команда изменить какие-то исходные данные. Так как команды прерывать текущие задачи не было, а изменяемые данные используются задачей, они будут изменены только по окончании текущей задачи. Поэтому сервер выдаёт ошибку 409 Conflict. Это правильно? Как принято поступать в подобных случаях?

Перемещено hobbit из talks

 

olegd
()

Чем посмотреть свойства Portable Executable?

Нужно в консоли посмотреть свойства, указанные в заголовках виндовых бинарников (EXE, DLL), желательно под Линуксом, не запуская виртуальные машины и не подключаясь к удалённой машине с оффтопиком. Требуется информация, которая в Windows показывается в окне Properties: имена и даты цифровых подписей, если есть, и версии. Плюс архитектура: x86, x86_64, Mono/.Net и пр.

file показывает только архитектуру. objdump и readelf – для других форматов. В nm ничего похожего не нашёл. Проводник WINE гуёвый. Что ещё посоветуете?

 ,

olegd
()

Какие сейчас есть клиенты REST?

Есть сервер, который понимает REST API. Без сложного веб-интерфейса на js (вроде Flask или swagger).

Чем сейчас можно воспользоваться для отправки туда сигналов и данных? Что из них способно работать в режиме Mutual TLS? Помимо curl.

 , ,

olegd
()

RSS подписка на новые темы