Employer might be reading...
Usually looking at the program will reveal the possible places for infinite loops. Any loop you have coded (or someone else has if you are on maintenance/support). Look at the conditions that allow these loops to exit. Ensure that the loop-control variables are changing how the loop expects them to, including that nothing is changing them in a paragraph'/section that is being performed. Looking for all occurences of the loop-control variables in the editor or on the compiler listing will help out there.
Setting the CPU limit low, as Robert suggested, is a good idea. As the loop is likely to be entered almost immediately, try with one second first. You'll get the dump, and should be able to work out from the PSW whereabouts in the program it ran out of CPU time. In the unlikely event of that not being inside a loop, increase the CPU limit. If you put DISPLAYs in, showing loop-control variables for instance, also ensure you have an output limit on the jobstep.
Loops that are caused by the data, rather than a looping-structure being coded incorrectly, are trickier as it might take more time before the loop is entered. Here the OPS can help you out. If you have access an enquiry-only JES console, you can watch the CPU on the job. When it shoots up, ask the OPS to cancel it with a dump. If you don't have access to a console yourself, explain to the OPS that you are trying to debug a loop and ask them if they can keep an eye on it and cancel it with a dump when the CPU usage goes up.
Loops are usually simple to find. You've already tried with the source/listing but it is worth trying again. Then add the DISPLAYs and cut the time down/limit the LINES.
There are some varieties of tricky loops. These sort of things are usually caused by GO TOing out of a PERFORMed paragraph/section, or othewise "dropping through" the program in some way. PERFORMs cannot be "recursive", so if you have PERFORM A, which PERFORMs B, which PERFORMs C, which PERFORMS A or B or C, you have a loop. If you have a paragraph/section which is PERFORMed multiple times from the same PERFORM (PERFORM n TIMES, PERFORM UNTIL) and you have a GO TO in the paragraph/section then you may well get a loop. If you think that you can alter some loop-control variable (like n TIMES and other such) and are relying on that, then you will have a loop. There are many more possibilities.
Many (even all) of the ways to create an infinite-loop are beginers' mistakes. It is good in that it gives you lots of practice, but you must learn from them each time so as not to repeat them. This is the main reason that it is best if you can find it yourself (which you are trying to do). Once you have more experience, you should have no fear of a loop which brings down production.
Once you've cracked a few loops, try the next one just from the dump, with no displays added. All the information you need is there. It is a good way to find out what all that stuff at the back of the compile listing means
Good luck, and let us know how you get on.
If you are still stuck, post what you think are the most likely parts of the code and we can see what we can do.