Инструменты пользователя

Инструменты сайта

Перевод этой страницы:

ru:faq

Что делать если accel-ppp периодически падает?

Собираем accel-ppp с опцией -DCMAKE_BUILD_TYPE=Debug и -DCMAKE_C_FLAGS=«-g -O0» указывающей, что сборка должна включать отладочную информацию, а так же -DMEMDEBUG=TRUE для выявления утечки памяти. В консоли выполняем ulimit -c unlimited разрешая создавать core файлы без ограничения по размеру. Редактируем /etc/sysctl.conf добавляя параметры

kernel.core_uses_pid = 1
kernel.core_pattern = /root/core-%e-%p

Применяем sysctl -p

Выполняем для применения параметров.

ulimit -c unlimited

Редактируем /etc/security/limits.conf добавляем следующую строку, для применения параметров после перезагрузки ОС.

*  soft  core  unlimited

Для того, что бы убедиться в правильности проделанных действий, рекомендуется скомпилировать следующий код с заведомо допущенной ошибкой. Создаем file.c со следующим содержимым

int main() {
  *(char *)0 = 0;
  return 0;
}

Компилируем

gcc file.c

Выполняем ./a.out

Выполнив команду dmesg, должны увидеть информацию о segfault. Наличие core dump файла в директории /root должно говорить о правильности выполненных действий.

Также не стоит забывать при отладке о важности детального логирования и указывать verbose=1 в секциях типы подключений и модулей которые используются.

[ipoe]
verbose=1

[pptp]
verbose=1

[log]
log-debug=/var/log/accel-ppp/debug.log
level=5

Run debug mode accel-ppp | Запустить accel-ppp в режиме отладки

#gdb –args /usr/sbin/accel-pppd -c /etc/accel-ppp.conf -p /var/run/accel-ppp.pid

$run

How to rotate logs ?

Для этого вы можете использовать системную утилиту logrotate. Создайте файл /etc/logrotate.d следующего содержания.

/var/log/accel-ppp/*.log {
        missingok
        sharedscripts
        postrotate
                test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid`
        endscript
}

I don't see pppd processes, how to manually terminate session ?

Yes, in fact accel-ppp doesn't use pppd because it has its own ppp implementation.
To terminate session you may use three methods:

1. Use cli (telnet or tcp):

  By default telnet listens connections on 2000 port and tcp on 2001 port.
$ telnet 127.0.0.1 2000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
accel-ppp version 1.5.0
accel-ppp# terminate if ppp0

or

$ echo 'terminate if ppp0' | nc -q0 127.0.0.1 2001

There are also other criterias to select session(s), use help cli command to get more information.

2. Use radius Disconnect-Message:

$ echo 'NAS-Port=0' | radclient 127.0.0.1:3799 disconnect testing123
Received response ID 170, code 41, length = 20

and you can control it in logs:

[2012-01-21|16:48:55]:  info: ppp0: recv [RADIUS|Disconnect-Request id=aa <NAS-Port 0>]
[2012-01-21|16:48:55]:  info: ppp0: send [RADIUS|Disconnect-ACK id=aa]

3. Use snmp:

$ snmpset -m +ACCEL-PPP-MIB -v 2c -c local 127.0.0.1 ACCEL-PPP-MIB::termByIfName.0 = ppp0

For more information visit SNMP page.

Совет по оптимизации системы

Выключение этих опций позволит менее нагружать систему ненужной работой. Добавить в /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=0 net.ifnames=0 intel_idle.max_cstate=1 biosdevname=1 crashkernel=auto audit=0 noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off"

$sudo update-grub

Принудительное распределение по ядрам

принудительное распределение по ядрам скрипт идет в комплекте ixgbe драйверов

#/etc/bin/set_irq_affinity.sh -x 0-1 eth0
#/etc/bin/set_irq_affinity.sh -x 2-3 eth1

$ cat /proc/interrupts

           CPU0       CPU1       CPU2       CPU3

 57:  609661406          0          0          0   PCI-MSI-edge      eth0-TxRx-0
 58:         92 4081616515          0          0   PCI-MSI-edge      eth0-TxRx-1
 59:        400          0          0          0   PCI-MSI-edge      eth0
 60:        905          0  897113437          0   PCI-MSI-edge      eth1-TxRx-0
 61:       1390          0          0  892591683   PCI-MSI-edge      eth1-TxRx-1

Посмотреть версию драйвера и прошивки сетевой карты

# ethtool -i eth0

driver: ixgbevf
version: 4.3.6
firmware-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

Посмотреть детально что именно нагружает систему

в Debian установить

#apt-get install linux-tools

В Debian 10 необходимо указывать версию загруженного ядра

#apt-get install linux-tools-5.3

# perf top

  13,81%  [kernel]            [k] __do_softirq
  12,32%  libzebra.so.0.0.0   [.] if_lookup_by_index
   5,43%  [kernel]            [k] fib_table_lookup
   2,59%  [kernel]            [k] _raw_spin_lock
   2,50%  [kernel]            [k] ixgbevf_clean_rx_irq
   2,21%  [kernel]            [k] _raw_spin_unlock_irqrestore
   1,60%  [kernel]            [k] ixgbevf_xmit_frame
   1,47%  [kernel]            [k] netflow_target

Использовать группу IP для ната

iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -o iface -j SNAT –to-source x.x.x.82-x.x.x.97 –persistent

Посмотреть включен ли forwarding

cat /etc/sysctl.conf | grep forward

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1

# sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

Модуль ipoe загружен, что-то нет старта сессий, dhcp запросы есть, а ответов нет и в логе тишина

Отключите ВСЕ firewall и selinux

#iptables -F
#ebtables -F
#iptables -t mangle -F

#systemctl disable firewalld
#systemctl stop firewalld

посмотреть что есть в таблице для nft
#nft list ruleset

посмотреть что есть в таблицах iptables
#iptables -nL
#iptables -t mangle -nL

Fix Upload problem | Исправление проблемы с исходящим каналом от абонента

disable tso gso gro | необходимо выключить tso gso gro

#ethtool -K eth0 tso off gso off gro off

Fix Download speed problem | Исправление проблемы скорости с входящем каналом к абоненту

change shaper from htb to tbf | измените шейпер с htb на tbf

[shaper]

down-limiter=tbf

Show interface eth errors | Показать ошибки на eth интерфейсе

#ethtool -S eth0 | grep «csum\|miss\|error»
#ethtool -m eth0

Change powersave mode pcie_aspm | Изменить powersave режим pcie_aspm

проверить

#cat /sys/module/pcie_aspm/parameters/policy

powersave

заменить

#echo performance > /sys/module/pcie_aspm/parameters/policy

если выдало

[default] performance powersave

или ошибку

bash: echo: write error: Operation not permitted

можно попробовать добавить в /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_aspm=off"

обновить initramfs и сделать reboot

Full log ppp | Получить полный лог для ppp

[ppp]
verbose=1
[pppoe]
verbose=1
[log]
level=5
ru/faq.txt · Последние изменения: 2020/03/29 19:29 — alexander