Jmeter не заканчивается из-за потоков демона - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь запустить файл JMX из режима не GUI на сервере linux. Использование протокола SFTP для загрузки файла в хранилище объектов. Ниже приведены сценарий и конфигурация, используемые для запуска сценария.

Test.jmx

import com.jcraft.jsch.*;
import java.io.*;

def jsch = new JSch()
def session = jsch.getSession("user1", "xyz", 4000) 
session.setConfig("StrictHostKeyChecking", "no")
session.setPassword("password")
def sftpSession = session.connect()
def channel = session.openChannel("sftp")
channel.connect();
def channelSftp = (ChannelSftp)channel;
log.info("SFTP Connection with host is acquired" + channelSftp)
channelSftp.cd("/0002/test/upload/r9a1");
def f1 = new File("/home/dc-user/Files/test_exact5mb.txt");
channelSftp.put(new java.io.FileInputStream(f1), f1.getName()+ Math.random());
session.disconnect()

Используемая конфигурация: Нет потоков - 150 Период разгона - 1 л oop Количество -1

После запуска скрипта из 150 файлов иногда загружается 126, 129 или 141 файл, но не 150. Ниже приведена ошибка, которую я вижу на терминале

The JVM should have exited but did not.
The following non-daemon threads are still running (DestroyJavaVM is OK):
Thread[Connect thread 10.157.147.242 session,5,main], stackTrace:java.net.SocketInputStream#socketRead0
java.net.SocketInputStream#socketRead at line:116
java.net.SocketInputStream#read at line:171
java.net.SocketInputStream#read at line:141
com.jcraft.jsch.IO#getByte at line:82
com.jcraft.jsch.Session#read at line:908
com.jcraft.jsch.Session#run at line:1378
java.lang.Thread#run at line:74

Пожалуйста, дайте мне знать, если мне не хватает какой-либо конфигурации

1 Ответ

0 голосов
/ 26 марта 2020
  1. Я не вижу, как этот код может работать, поскольку ваш i нигде не определен, поэтому он даже не будет компилироваться
  2. Кажется, что некоторые потоки не могут быть завершены поскольку они все еще что-то читают, я полагаю, что у вас есть какая-то форма SLA или NFR , которые определяют максимально допустимое время для операции загрузки файла, и ваш тест, по-видимому, превышает это время.

    Поэтому перед вызовом def sftpSession = session.connect() я бы порекомендовал разместить вызов функции Session.setTimeout () , например:

    session.setTimeout(5000)
    

    , если операция не завершена в Через 5 секунд ваш сэмплер выйдет из строя

Если вам не очень удобно работать со скриптами Groovy, используя S SH SFTP , то сэмплер может быть намного проще, посмотрите Загрузка тестирования серверов FTP и SFTP с использованием статьи JMeter для получения более подробной информации.

...