Как и множество больших сервисов, Яндекс Еда основана на микросервисной архитектуре. Все сервисы написаны на C++ с использованием фреймворка userverЧитать полностью »
Рубрика «strace»
Как мы планировали повысить версию PHP за месяц, а потратили на это год
2023-08-24 в 7:01, admin, рубрики: perf, php, phpunit, rector, strace, symfony framework, монолит, рефакторингКак Иван ошибку в бэкенде локализовывал
2020-09-09 в 7:55, admin, рубрики: bash, debug, gdb, linux, networks, strace, tcpdump, Блог компании FunCorp, дебаггинг, сети, тестирование, Тестирование IT-систем, Тестирование веб-сервисовВ комментариях к одной из моих статей про базовые команды Linux shell для тестировщиков справедливо заметили, что в ней не было указано применение команд в процессе тестирования. Я подумал, что лучше поздно, чем никогда, поэтому решил рассказать историю Backend QA-инженера Вани, который столкнулся с неожиданным поведением сервиса и попытался разобраться, где именно случилась ошибка.
Почему в Docker не работает Strace
2020-07-02 в 7:12, admin, рубрики: docker, ITSumma, ptrace, strace, Блог компании ITSumma, виртуализация, Настройка Linux, под капотом, пользователи, процессы, системное администрированиеКогда я редактировала страницу о возможностях контейнеров для журнала «How Containers Work», мне потребовалось объяснить, почему в Docker не работает strace
. Вот что случалось при запуске strace
в Docker-контейнере на моем ноутбуке:
$ docker run -it ubuntu:18.04 /bin/bash
$ # ... install strace ...
root@e27f594da870:/# strace ls
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
strace
работает через системный вызов ptrace
, поэтому без разрешения для ptrace
ничего не заработает! Но это легко исправить, и на моем ноутбуке я все сделала вот так:
docker run --cap-add=SYS_PTRACE -it ubuntu:18.04 /bin/bash
Но мне было интересно не решить проблему, а разобраться, почему эта ситуация вообще возникает. Так почему же strace
не работает, а --cap-add=SYS_PTRACE
все исправляет?
Читать полностью »
BPF для самых маленьких, часть нулевая: classic BPF
2020-03-24 в 10:34, admin, рубрики: C, cls_bpf, iptables, seccomp, strace, tcpdump, xt_bpf, Разработка под Linux, Сетевые технологииBerkeley Packet Filters (BPF) — это технология ядра Linux, которая не сходит с первых полос англоязычных технических изданий вот уже несколько лет подряд. Конференции забиты докладами про использование и разработку BPF. David Miller, мантейнер сетевой подсистемы Linux, называет свой доклад на Linux Plumbers 2018 «This talk is not about XDP» (XDP – это один из вариантов использования BPF). Brendan Gregg читает доклады под названием Linux BPF Superpowers. Toke Høiland-Jørgensen смеется, что ядро это теперь microkernel. Thomas Graf рекламирует идею о том, что BPF — это javascript для ядра.
На Хабре до сих пор нет систематического описания BPF, и поэтому я в серии статей постараюсь рассказать про историю технологии, описать архитектуру и средства разработки, очертить области применения и практики использования BPF. В этой, нулевой, статье цикла рассказывается история и архитектура классического BPF, а также раскрываются тайны принципов работы tcpdump
, seccomp
, strace
, и многое другое.
Разработка BPF контролируется сетевым сообществом Linux, основные существующие применения BPF связаны с сетями и поэтому, с позволения @eucariot, я назвал серию "BPF для самых маленьких", в честь великой серии "Сети для самых маленьких".
Strace в Linux: история, устройство и использование
2020-03-24 в 10:17, admin, рубрики: C, linux, strace, UNIX, Блог компании Badoo, Настройка Linux, Программирование, системное администрирование
В Unix-подобных операционных системах общение программы с внешним миром и операционной системой происходит через небольшой набор функций — системных вызовов. А значит, в отладочных целях полезно бывает подсмотреть за выполняемыми процессами системными вызовами.
Следить за «интимной жизнью» программ на Linux помогает утилита strace
, которой и посвящена эта статья. К примерам использования «шпионского» оборудования прилагаются краткая история strace
и описание устройства подобных программ.
Отлаживаем развертывание ПО со strace
2019-12-04 в 7:12, admin, рубрики: low level, ops, reliability, servers, strace, tools, Блог компании Southbridge, Серверное администрирование, Софт
Моя основная работа — это, по большей части, развертывание систем ПО, то есть уйму времени я трачу, пытаясь ответить на такие вот вопросы:
- У разработчика это ПО работает, а у меня нет. Почему?
- Вчера это ПО у меня работало, а сегодня нет. Почему?
Это — своего рода отладка, которая немного отличается от обычной отладки ПО. Обычная отладка — это про логику кода, а вот отладка развертывания — это про взаимодействие кода и среды. Даже если корень проблемы — логическая ошибка, тот факт, что на одной машине все работает, а на другой — нет, означает, что дело неким образом в среде.
Поэтому вместо обычных инструментов для отладки вроде gdb у меня есть другой набор инструментов для отладки развертывания. И мой любимый инструмент для борьбы с проблемой типа "Почему это ПО у меня не пашет?" называется strace.
Решение проблемы ограничения PTRACE_ATTACH в контейнерах Docker
2017-07-24 в 14:46, admin, рубрики: devops, docker, ptrace, seccomp, security, strace, виртуализация, Настройка Linux, Серверное администрирование, системное администрирование
В последние два года мы широко используем Docker как для разработки, так и для выполнения систем в производственной среде, и все текущие продукты для наших клиентов разрабатываются именно с учетом данной системы контейнеризации. Стоит отметить, что Docker достаточно сильно изменяется от версии к версии, добавляя как дополнительные возможности (Swarm, Compose), так и дополнительные инструменты повышения защищенности и контроля приложений.Читать полностью »
Использование утилит timeout & strace для мониторинга неактивности пользователя для разрыва соединения Shellinabox
2017-07-06 в 10:15, admin, рубрики: linux, python, shellinabox, ssh, strace, Разработка под LinuxНедавно я занимался тем, что исследовал какие существуют решения для реализации web-ssh прокси-сервера. Суть задачи заключается в том, чтобы дать пользователям возможность соединяться с произвольным ssh-сервером посредством web-интерфейса. Обычно, решения web-ssh предназначены для соединения с сервером, на котором они развернуты, но в рамках моей задачи мне хотелось, чтобы пользователь мог указать IP, порт, имя и пароль пользователя (или ключ) и выполнить соединение с произвольным сервером. С ходу найти подобного решения мне не удалось.
Вообще-то, конечно, есть Guacamole, но для моей задачи использование этого приложения было слишком затратным как по ресурсам разработки, так и по функциям и их организации, поэтому от Guacamole я отказался.
Однако, для открытого пакета shellinabox я обнаружил решение на блоге на немецком языке, которое я и решил довести до нужного мне уровня. В итоге, получился симпатичный контейнер Docker, который можно найти как на GitHub так и на Dockerhub, который решает все необходимые задачи.
Но, статья не об этом, а о сопутствующем коде на Python, который мне пришлось написать. Дело в том, что мне не нравилось, что если пользователь открыл web ssh и куда-то ушел, то сессия будет висеть бесконечно, что на мой взгляд неприемлемо. Читать полностью »