Домой Учебники по Linux и Unix Linux: Как сгенерировать исключение TimeoutException для определенного IP-адреса с помощью команды TC...

Linux: Как сгенерировать исключение TimeoutException для определенного IP-адреса с помощью команды TC qdisk и netem?

915
0

TC команда Linux, с помощью которой вы можете управлять настройками управления трафиком

В Linux TC command используется для Show or Manipulate traffic control settings ,

Почему вам нужно добавить небольшую задержку на конкретный сайт? Подумайте об этом сценарии:

  • На производственном сайте вы получаете некоторые исключения TimeoutException, и во время этого исключения ваше приложение работает ненормально.
  • Есть некоторые другие потоки, которые могут генерировать неправильные данные или пустые данные в случае TimeoutException.
  • Теперь, если вы хотите отладить ваше приложение, то абсолютно невозможно связываться с производственной средой, пока вы не найдете решение.
  • В этом случае вы можете использовать свою локальную среду или среду разработки для тестирования.
  • В локальной среде вы можете запустить свое Java-приложение, и после его успешного запуска вы можете использовать TC command генерировать задержку и в конечном итоге TimeoutException.

У вас есть ниже вопросы?

Тогда вы в нужном месте

  • Как смоделировать задержку для определенного IP через определенный порт?
  • Задержка сетевого трафика на определенный IP
  • linux — симулирует сетевую задержку на конкретном порту, используя tc
  • tc: добавление смоделированного network latency на ваш сервер Linux
  • Как убрать задержку tc?
  • задержка netem для конкретного ip и порта

Вот команда TC

Просто поместите ниже всех строк в файл crunchify_tc_command.sh ,

crunchify_tc_command.sh

1
2
3
4
5
6
7
#! / bin / Баш
tc qdisc del dev eth0 root
tc qdisc add dev eth0 корневой дескриптор 1 : ПРИО
tc qdisc add dev eth0 parent 1 : 3 справиться 30 : показатель TBF 20kbit буфер 1600 предел    3000
tc qdisc add dev eth0 parent 30 : 1 справиться 31 : задержка netem 30000ms 10мс распределение нормальное
tc filter добавить протокол dev eth0 ip parent 1 : 0 ПРИО 3 U32 соответствует IP DST 172.217.4.174 / 32 flowid 1 : 3
  • 1-я строка: будет delete корень qdisc , он будет заменен на pfifo_fast один .
  • 2-я строка: заменит pdifo_fast qdisc на prio один. По умолчанию очередь prio имеет 3 полосы (0, 1, 2).
  • 4-я строка: эмуляция сети ( netem ) предоставляет строительные блоки для создания узла обесценения.
  • 5-я ссылка: будет соответствовать конкретному IP-адресу (172.217.4.174) и будет вводить задержку 30000 milliseconds ,

Вот 172.217.4.174 это IP-адрес google.com в моем случае. Просто keep adding last line с разными IP address если у вас более одного IP-адреса.

ЧИТАТЬ ТАКЖЕ:  Как изменить версию Java / JDK по умолчанию и ClassPath в Linux, используя .bash_profile?

Как проверить, работает команда TC или нет?

Некоторое время назад я написал Java-программу для генерации TimeoutException вручную в Java . Вы можете использовать ту же программу.

Вот шаги:

  • Измените readTimeout на 5000 миллисекунд
    • Поиск линии connection.setReadTimeout(10); и измените значение с 10 на 5000 connection.setReadTimeout(5000);
  • Запустите программу
  • Вы больше не должны видеть socketTimeoutError , это означает, что вы получаете результат от google.com

  • Следующие шаги — выполнить команду crunchify_tc_command.sh
    • Баш-3,2 $ sh crunchify_tc_command.sh
  • Как вы видите в приведенном выше скрипте , мы добавили задержку соединения до 30 секунд
  • Так как в Java-программе у нас есть 5-секундный тайм-аут , ваша программа начнет сбой с java.net.SocketTimeoutException: Read timed out ошибка.

Как отменить эффект команды TC?

Просто используйте команду ниже, чтобы отменить изменения файла сценария оболочки .

1
tc qdisc del dev eth0 root

Надеюсь, что этот трюк работает хорошо для вас, если вы хотите сгенерировать задержку подключения к любому IP-адресу для вашего проекта.

Linux: Как сгенерировать исключение TimeoutException для определенного IP-адреса с помощью команды TC qdisk и netem?

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь